STM32串口通讯
基于寄存器的STM32流水灯编程与基于固件库的STM32流水灯的差异
基于寄存器的编程方式更贴近与底层,类似机器语言一样;适用于较想深入了解内核的人。而基于固件库编程相当于对寄存器添加了一层封装,使移植更方便,偏向于更高层的更复杂的算法。
串口通讯的一些基本概念
1.串行通信与并行通信
通讯按照数据传输的方式可分为串行通信与并行通信,串行通讯是指设备之间通过少量数据信号线(一般是 8根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。而并行通讯一般是指使用 8、16、32 及 64根或更多的数据线进行传输,数据位是同时传输的通讯方式。
2、全双工、半双工及单工
根据通讯方向的不同,通讯方式又可以分为全双工、半双工及单工三种方式。
全双工:在同一时刻允许两个设备的任何一个都可以同时进行数据的发送与接收,就好比双向车道,两个方向的车辆不会有任何的干扰。
半双工:在同一时刻,只允许两个设备进行接收或者发送,不允许在同一时刻单个设备既接收又发送,就好比在一条乡间小道上同一时刻只允许一辆车通过。
单工:在任何时刻,数据的传输方向都是不变的,数据只允许一个固定的方向传输,接收双方是固定的,一个固定为发送设备,一个固定为接收设备。就好比是单行道,只允许一个方向的行驶。
3.同步通信和异步通信
同步通信:收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据,即:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步通信:不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,即:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
串口通讯的操作过程
实验环境
软件:MDK5,多功能串口调试助手。
硬件设备:ST-Link V2下载烧录线,USB to TTL(串口转换线),STM32核心板
硬件连接:
①USB转TTL线与STM32核心板的连接
②ST-Link V2线与STM32核心板的连接接口
STM32核心板 | ST-Link |
---|---|
3V3 | 3V3 |
GND | GND |
SWIO | SWDIO |
SWCLK | SWCLK |
3.硬件连接实物图
导入一个STM32的串口项目
1导入STM32的项目到Keil中
2.编译项目文件,在编译过程中keil可能会提示xx文件找不到,你就需要手动添加该文件。
3.设置keil,使程序能够烧录到stm32芯片运行
①设置输出文件
②设置调试页面
这里是引用
③如果现在就进行烧录,可能会报错"Flash Download error"
④右键项目–>Option for Target ‘USART’–>Debugger–>Setting–>Flash Download–>Erase Full Chip。
4.连接USB转串口线,并在电脑上安装串口驱动程序。
双击CH341SER.INF选择安装
在安装的时候,你需要保证你的usb是连上的,否则会失败
安装成功后打开设备管理器,查看端口是否安装成功
6.打开多功能串口调试助手,打开串口,在开发板上按一次Reset键,会发送一次数据。
STM32系统给上位机win10连续发送"hello windows!",当上位机给STM32发送"Stop将上述项目
1.将上述项目复制到另一个地方,重新使用keil打开
2.更改部分代码
main.c
#include "stm32f10x.h"
#include "bsp_usart.h"
/**
* @brief 主函数
* @param 无
* @retval 无
*/
// 接收缓冲,最大100个字节
uint8_t USART_RX_BUF[100];
// 接收状态标记位
uint16_t USART_RX_FLAG=0;
//串口中断服务函数
void DEBUG_USART_IRQHandler(void