【正点原子】+【STM32CubeMX】+【STM32F103C8T6】———USART

因为要使用STM32CubeMX自动生成代码,所以这里学习的是正点原子HAL库版代码,并将其移植到STM32F103C8T6上。

第二个实验:USART


效果:单片机实现串口发送和接收的功能

接收(共有两种实现的方法):
①采用HAL库的流程:
串口1接收到RXBUFFERSIZE(1)个字符产生接收完成中断
函数USART1_IRQHandler:每次产生串口1中断时会进入该函数,该函数会调用HAL_UART_IRQHandler进行通用的串口中断处理
函数HAL_UART_IRQHandler:内部通过判断中断类型决定调用哪个函数,这里是接收完成中断,则继续调用UART_Receive_IT
函数UART_Receive_IT:该函数每执行一次(接收到一个字符)pRxBuffRtr指针加1,并保存接收到的字符到pRxBuffRtr,同时RxXferCount计数量减1,当UART_Receive_IT中当RxXferCount=0时执行回调函数
函数HAL_UART_Receive_IT:在USART的初始化函数MX_USART1_UART_Init中要先调用一次,设置pRxBuffRtr和RxXferCount,然后每次HAL_UART_IRQHandler完成后还要再调用一次,重新设置pRxBuffRtr和RxXferCount
函数HAL_UART_RxCpltCallback:在UART_Receive_IT中当RxXferCount=0时执行该回调函数,进行通讯协议的判断(0D0A),并转存数据,将pRxBuffRtr内的数据转存到自定义的缓冲区USART_RX_BUF

②采用正点原子简化流程:
不适用中断处理回调函数HAL_UART_RxCpltCallback,直接在USART1_IRQHandler内执行中断处理。
函数USART1_IRQHandler:每次产生串口1中断时进入,在调用__HAL_UART_GET_FLAG判断接收到中断时,进入中断处理,包括接收数据,协议判断,数据转存
函数HAL_USART_Receive:虽然是等待式函数,但每次只接收1个字节,所以效果等同于HAL_UART_Receive_IT

这里推荐用第二种方式,因为过程简单,效率更高。

总结一下:正点原子的代码可靠性高,规范性强,学会使用它的函数可以提高项目的稳定性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值