基于STM32的USART串口通信
1 基于寄存器与基于固件库的stm32编程方式有什么差异
基于寄存器: 顾名思义就是要配置各种各样的寄存器来实现想要的功能,但是在获得了可移植性与更易于了解内核工作流程的同时,增加了很多麻烦,比如程序可读性差和维护复杂。
基于固件库: 可以根据已有的库函数来实现想要的功能。优点就是开发简单,代码易于理解,适合学习。但同样也是它的缺点,对底层的了解相对没那么深,灵活性可移植性相对较差。
2 STM32的USART窗口通讯程序调试
开发板:正点原子STM32F1精英版
资料下载:点击下载(提取码:xva4)
2.1 安装串口驱动
在上述下载精英版的资料之后在资料里面找到驱动文件
依次打开下列文件夹
串口连接到电脑然后打开驱动安装即可,一定要串口连接到电脑否则会报错
显示这样就算安装串口驱动完成。
之后我们需要串口调试助手也在上述1,软件文件夹中,如下图
2.2 安装stlink驱动
stlink用来给开发板烧录程序,也需要安装驱动
和上述文件夹路径相同,选择下图文件夹,打开安装即可
2.3 编写程序
我们根据正点原子的例程改写
按图示打开文件夹
进去之后选择实验4串口通信文件夹拷贝到自己喜欢的文件夹
之后进去USER文件夹选择kile工程文件打开。
更改主函数如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
int main(void)
{
u16 t,p=0;
u16 len;
u16 times=0;
u8 *stop="stop stm32";
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
KEY_Init(); //初始化与按键连接的硬件接口
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;
for(t=0;t<len;t++)
{
if(stop[t]==USART_RX_BUF[t])
{
p++;
}
if(p==10)
{
printf("ok,stop\r\n\r\n");
USART_RX_STA=0;
while(1){}
}
}
USART_RX_STA=0;
}else
{
times++;
p=0;
if(times%200==0)printf("hello windows\r\n");
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
}
}
2.4 烧录程序
编好程序之后我们需要把程序烧录到板子上,让板子工作。
按照下图操作
因为我们用stlink烧录所以就选择stlink debugger,如果使用jlink就选择相对应的就行。
之后依次选择确定就行。
接下来进行编译链接烧录
2.5 结果展示
总结: 通过本次小实验,知道了如何使用stm32串口进行通信,将想表达的信息发送给我们的上位机。我们使用的直接时库函数的例程所以简单很多,后续需要多学习相关寄存器的配置才能真正理解串口通信。