新手学习记录中:
得先有from pyb import UART的包以及import json
初始化uart=UART(3,115200)表示是在串口3处,其波特率为115200
(需要看openmv的原理图,看uart3的TX和RX是哪两个IO口,通过TTL与其通信)
接线方式:TX-RX,RX-TX,GND-GND,VIN-VCC
初始化也可用uart.init(115200,bits=8,parity=None,stop=1)来表示:
打包数据:通过struct模块的pack函数将数据封装成字符串(二进制传输):
前面的格式可以参照此表(几个字符几个整型):
其次是两个帧头,stm32可通过帧头来判断该数据是不是openmv所发送的数据
后两个即为所要传输发送的数据,可在最后加上一个帧尾,32可通过此知道数据接收结束
一般有关openmv通信的相关函数就这几个:
其次就是stm32的串口:
我所使用的STM32F103ZET6开发板已经装载了USB-TTL芯片,所以不需要外接模块,用USB线直接连接即可。
若需要外接USB-TTL模块,接线方式为:RX-TX,TX-RX,GND-GND
使用cubemx配置32串口:
其中UART是只支持异步串口,USART除异步串口外还支持同步串口,所以我这里选择USART。
要将MODE改为Asynchronous,下面的配置如果想要稳定,波特率可设为9600,想要快速的话,可设为115200。其他一般保持不变
之后再在GPIO Settings处看串口是否为所需串口。之后即可生成代码
阻塞式收发:
供电之后需要将代码先烧进32板中,再打开串口助手进行调试
需要注意:板上的USART需要用跳线帽盖住,不然烧代码会一直显示超时。而且烧完之后记得要按复位键,再用串口助手。
也可用printf函数来进行串口输出:
首先需要加上printf的头文件
再写上fputc函数
在while(1)处写上即可
要接收发出去的数据可用:(在while里面)
uint8_t buf[5];
HAL_UART_Receive(&huart1,buf,3,0xFFFF);
HAL_UART_Transmit(&huart1,buf,3,0xFFFF);
接收数据也可写接收函数:
int fgetc(FILE *stream)
{
uint8_t ch[1];
HAL_UART_Receive(&huart1,ch,1,0xFFFF);
return ch[0];
}
while里面加上:
int val=0;
scanf("%d",&val);
printf("%d\r\n",val);
使用中断收发,需要再在cubemx上配置:
在NVIC中对所用串口进行打勾并将优先级改为1。
生成代码即可
中断函数:
接收函数:
每发送或接收一个数据都会再次进入中断函数中
定时器配置:
配置中的Prescaler是看时钟树
右边APB1 Timer为8,所以Prescaler需要8-1
看视频说要将Count Period改为500000-1,但是我的无论怎么改都还是65535(应该没影响吧)
之后再将NVIC中的定时器TIM2打勾,改优先级即可生成代码
若以上有任何错误,欢迎大家在评论区指出,我很希望得到建议和改正