(1)硬件资源连接
核心板的串口是采用CH340芯片通过USB转串口的硬件电路设计,在计算机端安装相应的驱动程序,实现两机的串口通信,硬件原理图如图7.18所示。直接用串口线连接STM32开发板和PC机的串口即可。
(2)软件设计
本节的代码需使用附带例子程序中的串口函数,该函数包含串口初始化代码和接收代码。
图7.18 串口原理图
①先看usart.c该文件里面的代码,uart_init串口初始化函数,该函数代码如下:
代码中按前面介绍的串口寄存器设置,先计算得到USART1->BRR的内容。然后开始初始化串口引脚,接着把USART1复位,之后设置波特率和奇偶校验等。使用到了串口的中断接收,必须在usart.h里面设置EN_USART1_RX为1(默认设置就是1)。该函数才会配置中断使能,以及开启串口1的NVIC中断。这里把串口1中断放在组2,优先级设置为组2里面的最低。
②再看串口1的中断服务函数USART1_IRQHandler,该函数代码如下:
(www.xing528.com)
USART1_IRQHandler(void)函数是串口1的中断响应函数,当串口1发生了相应的中断后,就会跳到该函数执行。其中数组USART_RX_BUF[],一个全局变量USART_RX_STA实现对串口数据的接收管理。USART_RX_BUF的大小由USART_REC_LEN定义(默认设置200),USART_RX_STA是一个接收状态寄存器,其各位的定义见表7.1。
表7.1 USART_RX_STA定义
设计思路如下:
当接收到从计算机发过来的数据,把接收到的数据保存在USART_RX_BUF中,同时在接收状态寄存器(USART_RX_STA)中计数接收到的有效数据个数,当收到回车(回车的表示由2个字节组成:0X0D和0X0A)的第一个字节0X0D时,计数器将不再增加,等待0X0A的到来,而如果0X0A没有到来,则认为这次接收失败,重新开始下一次接收。如果顺利接收到0X0A,则标记USART_RX_STA的第15位,这样完成一次接收,并等待该位被其他程序清除,从而开始下一次的接收,而如果迟迟没有收到0X0D,那么在接收数据超过USART_REC_LEN的时候,则会丢弃前面的数据,重新接收。
EN_USART1_RX和USART_REC_LEN都是在usart.h文件里面定义的,当需要使用串口接收的时候,只要在usart.h里面设置EN_USART1_RX为1就可以了。不使用的时候,设置EN_USART1_RX为0即可,默认是设置EN_USART1_RX为1,也就是开启串口接收的。
(3)程序下载与观察实验结果
将本节的程序编译运行。计算机端使用SSCOM3.3串口助手软件,在串口调试助手的发送窗口区域输入字符串,最后实验结果如图7.19所示。
图7.19 串口通信结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。