这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【原创】串口学习笔记--from棚

共1条 1/1 1 跳转至

【原创】串口学习笔记--from棚

工程师
2025-06-19 19:16:12     打赏

Hal库串口

//Uart串行

//Usart并行

注意事项:

TXRX必须共地

配置时CH340TxRx要和板子上反着接

extern 只是声明变量,不能重复定义。

如下图

图片1.png

图片2.png

图片3.png

USB转串口的芯片

 

如何驱动

PA9,PA10

设置波特率

Nvic串口中断使能

怎么发:

图片4.png

怎么收:

图片5.png

图片6.png

1.缓存区缓存数组buf[]

2.记录接收到的时间(中断),再用时间比较。

3.清空缓存区。

记录时间uwTick;

图片7.png

Hal_Get_Tick;

4. 中断回调函数

图片8.png

1)核对身份(确认那个串口)

2)记录时间

3

图片9.png

使能串口中断

5.   超时处理任务uart_tak

放调度器

图片10.png

为什么要把缓存区重新置位。

图片11.png

对比超时解析和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)。

图片22.png




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]