stm32串口通信
一、基于寄存器与基于固件库的stm32
基于寄存器与基于固件库的stm32 LED流水灯例子的编程方式差异比较:
1、基于寄存器方式的开发特点:
(1)具体参数更直观;
(2)程序运行占用资源少。
但是它的缺陷也不可忽视,如下:
(1)开发速度慢;
(2)程序可读性差;
(3) 维护复杂。
上述缺陷直接影响了开发效率,程序维护成本,交流成本。通常情况下,只有在频繁调用的中断服务函数时利用直接配置寄存器的方式。
2、基于固态库方式开发,也就是直接调用库函数,特点就是:
(1)外设交流方便;
(2)查错简单;
(3)对主控制器STM32上手简单。
总的来说基于寄存器:资料丰富,容易理解,适合新手学习。
基于固件库:可移植性强,更贴近底层,要求对工作原理有深入理解,适合有丰富经验的人使用。
二、STM32的USART串口通信程序实例
我们使用的是STM32F103,程序和软件资料由野火官方提供。
1.先在野火资料包里找到CH341SER.EXE,点击安装
2.将USB线与stm32上的“USB转串口”连接,另一端接上电脑,将J-LINK线与stm32连接,另一端接电脑,可看见stm32亮红灯
3、在官方资料库中找到USART1接发文件夹下的keil工程文件。
4、将stm32f10x_it.c文件的串口中断服务函数和main.c的部分修改。
代码如下:
stm32f10x_it.c文件
int i=0;
uint8_t ucTemp[50];
void DEBUG_USART_IRQHandler(void)
{
if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
{
ucTemp[i] = USART_ReceiveData(USART1);
}
if(ucTemp[i] == '!')
{
if(ucTemp[i-1] == '2'&&ucTemp[i-2] == '3'&&ucTemp[i-3] == 'm'&&ucTemp[i-4] == 't'&&ucTemp[i-5] == 's'&&ucTemp[i-6] == ' ')
if(ucTemp[i-7] == 'p'&&ucTemp[i-8] == 'o'&&ucTemp[i-9] == 't'&&ucTemp[i-10] == 's')
{
printf("收到!");
while