蓝桥杯嵌入式省赛模板构建——UART接收

UART接收:单片机接收电脑发送的数据

程序设计步骤

1.配置USART1的PA9,PA10为串口收发引脚

2.配置USART的波特率、奇偶校验位、停止位、时钟

3.勾选NVIC Setting中的使能USART1的中断

4.将source生成的.c和.h文件移植到目标工程

4.1 USART初始化部分需要移植NVIC初始化内容

4.2 在it.c中添加USART1_IRQHandler中断服务函数

4.3在主函数中启动HAL_UART_Receive_IT(&huart1,rx_buf,1);

4.4在回调函数HAL_UART_RxCpltCallback实现串口接收处理,并在里面再次使能HAL_UART_Receive_IT(&huart1,rx_buf,1);

3.使能USART1的NVIC

选择优先级分组为组4(1 1 1 1) = 0xF范围0~15

4.将source生成的.c和.h文件移植到目标工程

4.2 在it.c中添加USART1_IRQHandler中断服务函数

定义数组uart_buf[2]用来存放单片机接收到的数据

在main中打开串口接收中断

意思是串口1接收一个字节到uart_buf里,每接收一个字节就产生一次中断

一个字节是8位,所以我们通过写0x00~0xff来控制LED灯亮灭

编写中断回调函数

在串口调试助手中写00~ff来控制LED灯

当电脑向单片机发送ff时,单片机上的LED灯就会按要求亮灭

串口接收固定长度的数据

假设我们的串口接收三个字节长度,每一个字节都能用来控制不同的外设,比如第一个字节写入EEPROM,第二个字节来控制LED灯

我们要定义一个数组rx_buf[10]来存放uart_buf接收到的数据,定义一个变量rx_cnt ,                  让rx_buf[rx_cnt++] = uart_buf[0];  串口每接收到一个值都放入rx_buf里并移位,这样就能缓存下来串口接收到的数据

让串口固定发送3个字节数据,并用第二个字节的数据控制LED灯

因为我们规定一次要发三个字节,但如果不小心第一次发错了只发了一个字节,后续意识到发错第二次又补发了三个字节,这样就会把第一次发送的一个字节保存下来这样顺序就会错乱

我们需要添加一个判断函数,如果两个字节发送间隔时间>50ms就清除一次rx_buf[]

(因为连续发送的话两个字节的时间间隔是<50ms的)

使用memset函数需要定义string.h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值