嵌入式入门——串口(3)数据收发流程

目录

串口数据收发流程(字符串)

    1. 综述

    2. 串口接收数据

    3. 串口发送数据


串口数据收发流程(字符串)

    1. 综述

STM32通过串口1和上位机对话,在接收到串口助手发送过来的字符串(以回车换行结束“\r\n”)后,会返回给串口助手。同时每隔一定时间,通过串口1输出一段信息,可以通过串口助手显示接收。

    2. 串口接收数据

①调用函数HAL_UART_Receive_IT(),开启接收中断,同时设置接收的缓存区以及接收的数据量。

当接收到一个字符之后,系统调用中断处理函数USART1_IRQHandler。在函数HAL_UART_IRQHandler中执行中断处理逻辑,而中断控制逻辑则通过判断中断类型是否完成中断在其中的函数UART_Receive_IT中执行,该函数会把数据保存在串口句柄的成员变量pRxBuftPtr缓存中,同时 RxXferCount计数器减1。如果我们设置 RxXferSize=10,那么当接收到10个字符之后,RxXferCount 会由 10减到 0(RxXferCount 初始值等于 RxXfersize),这个时候再调用接收完成回调函数HAL_UART_RxCpltCallback 执行。

②UART_Receive_IT函数中自动失能中断,需要再次开启中断才能再次接收数据。

③接收协议设计:【 定义数组g_usart_rx_buf[]、接收状态寄存器g_usart_rx_sta(自行添加)实现对串口数据的收发管理 】当接收到从电脑发过来的数据,把接收到的数据保存在 g_usart_rx_buf[] 中,同时在接收状态寄存器(g_usart_rx_sta) 中计数接收到的有效数据个数,当收到回车(由2个字节组成:0X0D 和0X0A)的第一个字节0XOD时,计数器将不再增加,等待0X0A的到来,而如果 0X0A 没有来到,则认为这次接收失败,重新开始下一次接收。如果顺利接收到 OX0A,则标记 g_usart_rx_sta 的第15 位,这样完成一次接收,并等待该位被其他程序清除,从而开始下一次的接收,而如果迟迟没有收到OX0D,那么在接收数据超过g_usart_rx_buf长度的时候,则会丢弃前面的数据,重新接收。

    3. 串口发送数据

首先判断全局变量 g_usart_rx_sta 的最高位是否为1,如果为1的话,那么代表前一次数据接收已经完成,接着将自定义缓冲区的数据发送到串口。


笔记还有较多遗漏,后期补充

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值