当前位置 博文首页 > 文章内容

    STM32F103C8T6-CubeMx串口收发程序详细设计与测试(2)——程序规划、代码编写及测试

    作者: 栏目:未分类 时间:2020-10-07 17:00:36

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    演示程序的功能:通过中断接收串口数据,在1750us时间内没有收到新的字节的话,将收到的数据原封不动地发送出去,以测试串口的完整收发流程。对使用到的函数进行了说明,阐述了各个函数的调用顺序和调用关系,在目标板上对代码进行了测试,结果表明,可以实现预期功能。

    摘要:演示程序的功能:通过中断接收串口数据,在1750us时间内没有收到新的字节的话,将收到的数据原封不动地发送出去,以测试串口的完整收发流程。对使用到的函数进行了说明,阐述了各个函数的调用顺序和调用关系,在目标板上对代码进行了测试,结果表明,可以实现预期功能。

    关键词:STM32F103C8T6 STM32CubeMX UART 收发程序设计

     

    2.1程序规划

    演示程序的功能:通过中断接收串口数据,在1750us时间内没有收到新的字节的话,将收到的数据原封不动地发送出去,以测试串口的完整收发流程。

    2.2 函数说明

    STM32CubeMx自动生成的初始化函数,孔丙火(公众号:孔丙火)这里不再做说明。

    (1)HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

    对于这个函数,孔丙火(公众号:孔丙火)认为这是一个配置函数,配置串口号、接收缓存区的指针和每次接收的数量,并使能接收中断。

    图2-1是此测试程序的该函数的调用,每次接收一个字节,存在ucUartTempBuf中。

    图2-1

    (2)HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart)

    此函数在串口的中断服务程序中调用,作用是将接收到的字节放到接收缓存区,判断整个数据是否已接收完整(是否已达到配置的数量),接收完整的话调用HAL_UART_RxCpltCallback(),并禁止接收中断。

    (3)HAL_UART_RxCpltCallback()

    此函数是一个回调函数,需要用户编写,孔丙火(公众号:孔丙火)认为,在此函数中,可以将收到的数据进行转移,如果需要继续接收的话,还要再次调用HAL_UART_Receive_IT(),由于这个回调函数有可能会被多个串口中断服务程序调用,因此在函数中需要区分串口。

    此篇文章的测试程序中,在此函数中启动定时器,用于1750us的定时。代码如图2-2所示。

    图2-2

    (4)HAL_TIM_PeriodElapsedCallback()

    此函数是一个回调函数,当定时器产生溢出中断时调用,需要用户编写,此测试程序中,定时1750us的时间到,说明一个完整数据帧已接收完成,调用HAL_UART_Transmit_IT()函数,将收到的数据,原封不动地发送回去。

    图2-3

    (5)HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

    孔丙火(公众号:孔丙火)认为,此函数也是一个配置函数,将发送数据指针和数量赋给相应的寄存器,然后使能发送缓存区为空中断,以便通过中断的方式将数据逐个字节的发送出去。

    (6)HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart)

    此函数在uart的中断服务程序中调用,将数据发到uart硬件缓存区,并监视已发送数量,发送数量达到目标值后,禁止发送缓存区为空中断。

    2.3 函数调用顺序

    函数调用顺序如图2-4所示。此图只是大体上展示了各个函数的调用顺序和调用关系,并不完全准确,由于中断的存在,有的进程是并行进行的。

    图2-4

    2.4 测试结果

    准备两帧数据:01 03 00 00 00 0A C5 CD;

    01 10 00 00 00 05 0A 00 01 00 02 00 03 00 04 00 05 EA 6A;

    各发送两帧,查看目标板的回复数据,如图2-5所示。自此,uart的收发流程就演示完毕,这也类似于Modbus串口通信的一个基本框架。

    图2-5

    文章在微信公众号同步推出,微信公众号:孔丙火,关注欣赏更多文章。