【得捷Follow me第4期】(补充)网络控制STM32从机、实现简易频率计功能
[复制链接]
本帖最后由 QuaX_Chow 于 2024-3-30 21:21 编辑
2024.3.30
本篇是Follow Me第四期任务提交的补充内容
分两个部分:网络控制STM32从机、实现简易频率计功能
1.网络控制从机
电脑上由网络调试助手使用TCP向W5500-EVB-Pico发送指令,再由W5500-EVB-Pico通过串口,向从机发送我们在从机设定好的指令,这样从机即可进行对应操作
框架示意图如下:
经查阅手册,从机主控F407的USART3为PB10和PB11:
连接即可:
对应在W5500-EVB-PICO上如下所示:
这里我们需要使用stlink给从机下载代码。
最终实物连接图如下:
- from usocket import socket
- from machine import Pin, SPI, UART
- import network
- import time
-
-
- uart = UART(0, baudrate=115200, bits=8, stop=1)
-
-
- def w5x00_init():
- spi = SPI(0, 2_000_000, mosi=Pin(19), miso=Pin(16), sck=Pin(18))
- nic = network.WIZNET5K(spi, Pin(17), Pin(20))
- nic.active(True)
-
- nic.ifconfig(('192.168.137.100', '255.255.255.0', '192.168.137.1', '8.8.8.8'))
-
- print('IP地址:', nic.ifconfig())
- while not nic.isconnected():
- time.sleep(1)
-
-
- def server_loop():
- s = socket()
- s.bind(('192.168.137.100', 5050))
- s.listen(5)
-
- conn, addr = s.accept()
- print("已连接到:", conn, "地址:", addr)
- print("服务器已开启")
- while True:
- data = conn.recv(2048)
- print("发送: ", data.decode('utf-8'), " 给从机")
- if data != b'NULL':
- uart.write(data)
-
-
- def client_loop():
- s = socket()
- s.connect(('192.168.137.114', 5050))
-
- print("循环客户端已连接!")
- while True:
- data = s.recv(2048)
- print(data.decode('utf-8'))
- if data != b'NULL':
- s.send(data)
-
- def main():
- w5x00_init()
-
- while True:
- server_loop()
-
- if __name__ == "__main__":
- main()
-
通过输入1~4四个数字,即可控制对应led的状态:
2.实现简易频率计功能
模块:MCU与AK5522使用IIS通信,AK5522读取到阈值高电平,模块串口打印一次“1”
这里需要开启双核,一个核用于定时,一个计数
框架示意图如下:
W5500-EVB-Pico通过串口👇直接读取AK5522模块发送的数据
模块的部分原理图如下:
功能实现代码如下:
- from usocket import socket
- from machine import Pin, UART
- import time
- import _thread
-
-
- uart1 = UART(1, baudrate=115200, bits=8, stop=1)
- uart0 = UART(0, baudrate=115200, bits=8, stop=1)
-
-
- count = 0
-
-
- def receive_and_count():
- global count
- while True:
- if uart1.any():
- data = uart1.read(64)
- count += data.count(b'1')
- time.sleep(1)
-
-
- def print_count():
- while True:
- uart0.write('FRE: {}\n'.format(count))
- time.sleep(1)
-
-
- _thread.start_new_thread(receive_and_count, ())
-
-
- print_count()
,用补充1的F407开发板输出1KHz的PWM,串口助手显示如下:
可以看见开发板十分准确地每秒打印了当前频率
功能实现
(完)
|