Hal库串口
//Uart串行
//Usart并行
注意事项:
TX和RX必须共地
配置时CH340的Tx和Rx要和板子上反着接
extern 只是声明变量,不能重复定义。
如下图
USB转串口的芯片
如何驱动
PA9,PA10
设置波特率
Nvic串口中断使能
怎么发:
怎么收:
1.缓存区缓存数组buf[]。
2.记录接收到的时间(中断),再用时间比较。
3.清空缓存区。
记录时间uwTick;
Hal_Get_Tick;
4. 中断回调函数
(1)核对身份(确认那个串口)
(2)记录时间
(3)
使能串口中断
5. 超时处理任务uart_tak
放调度器
为什么要把缓存区重新置位。
对比超时解析和DMA
超时解析是用的串口中断每发一次都要进一个中断,比如我要发送1个字符(8个字节),就需要进6次中断。所以就会占用cpu。然后通过中断回调函数讲数据储存起来。记得在储存后要刷新中断(以及更新huart1.pRxBuffPtr = uart_rx_buffer; 的作用是在超时处理后,将串口接收缓冲区指针重置到起始位置)。最后再通过当前时间与上一个时间戳进行比较。超时了就代表发完了就开始解析。(记得在初始化的时候开启第一次中断)
其次DMA就是检测到串口发来的信息后自己先把字符串一个一个的搬过来,知道8位搬完之后,会触发串口空闲中断,告诉CPU再进入回调函数中进行处理。之后就和上述过程一样就可以了,只不过要在回调函数中加上一个标志位来判断接收到字节了。别的没什么不一样的。
sizeof(uart_rx_dma_buffer)
若按字符串长度发送(如 strlen("123456")),则为 6 字节(不包含\0);若按内存块发送(如 sizeof("123456")),则为 7 字节(包含\0)。