御神楽的学习记录之串口通信小试牛刀

文章目录


前言

通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。而STM32CubeMX可以十分方便的生成Keil代码,两者配合编程可以高效的完成编程目标。


一、 Stm32CubeMX与Keil配合流水灯实现

1.新建STM32CubeMX项目

1) 选择芯片
笔者采用的硬件芯片为STM32F103C8系列
御神楽的学习记录之串口通信小试牛刀
2) 选择引脚,并配置GPIO输出
御神楽的学习记录之串口通信小试牛刀
选中引脚,选择GPIO_Output
3) 配置GPIO设置
选择Configuration
御神楽的学习记录之串口通信小试牛刀
设置GPIO
御神楽的学习记录之串口通信小试牛刀
设置如下:

御神楽的学习记录之串口通信小试牛刀
接着点击apply应用

2.项目导出

1) 点击导出项目,如图所示
御神楽的学习记录之串口通信小试牛刀
2) 导出设置
御神楽的学习记录之串口通信小试牛刀
设置项目名称、输出编译软件选择MDK-ARM V5,点击OK完成

3.使用Keil编译并烧录

1) 打开STM32CubeMx输出文件
2) 配置流水灯代码:

while (1)
  {
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);//b1亮
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_RESET);//a12灭
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);//c14灭
		HAL_Delay(1000);//延时1s
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);//b1灭
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_SET);//a12亮
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);//c14灭
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);//b1灭
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_RESET);//a12灭
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//c14亮
		HAL_Delay(1000);

3) 使用串口烧录工具烧录
御神楽的学习记录之串口通信小试牛刀
效果:
御神楽的学习记录之串口通信小试牛刀

二、串口通信hello windows

1.串口通信USART

通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个UART(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。
串行通信一般是以帧格式传输数据,即是一帧一帧的传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。USART 就是对这些传输参数有具体规定,当然也不是只有唯一一个参数值,很多参数值都可以自定义设置,只是增强它的兼容性。
USART功能构图
御神楽的学习记录之串口通信小试牛刀

2.新建STM32CubeMx项目

1) 选择芯片、选择USART1
御神楽的学习记录之串口通信小试牛刀
Mode选择Asynchronous异步通信
2) 接着设置设置波特率、数据长度、奇偶校验、校验
御神楽的学习记录之串口通信小试牛刀
默认设置如下:
御神楽的学习记录之串口通信小试牛刀
3) 导出设置
御神楽的学习记录之串口通信小试牛刀

2.Keil编译并烧写代码

1) 在while循坏中加入代码

        //需要发送的数据
		char data[]="hello windows!\n";
		//发送
		HAL_UART_Transmit(&huart1, (uint8_t *)data, 15, 0xffff);
		//延时
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//设置指示灯
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);
		
		HAL_Delay(1000);

2) 编译运行并烧写代码
御神楽的学习记录之串口通信小试牛刀

3.串口助手测试

1) 选择串口
御神楽的学习记录之串口通信小试牛刀
2) 实际效果:
御神楽的学习记录之串口通信小试牛刀
发送一条通信,红灯同时闪一下


三、Keil仿真逻辑分析仪观察管脚的时序波形

1.流水灯时序波形观测

1) 点击调试,选择logic analyzer
御神楽的学习记录之串口通信小试牛刀
2) 选择setup
御神楽的学习记录之串口通信小试牛刀
3) 设置端口信息,display type选择bit
这里设置的引脚为b1、a12、c14
御神楽的学习记录之串口通信小试牛刀
4) 开始调试,可以看到如下波形
御神楽的学习记录之串口通信小试牛刀

2.串口通信时序波形观测

输出图像为红灯闪烁的波形
御神楽的学习记录之串口通信小试牛刀
右下角可以查看到UART1正常

总结

通过通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。
同时STM32CubeMx是一个十分方便的嵌入式代码编写软件,可以图形化编程,直接设置即可自动生成代码

参考

https://blog.csdn.net/vic_to_ry/article/details/110451036
https://blog.csdn.net/qq_47281915/article/details/120870801
https://blog.csdn.net/qq_43279579/article/details/112213196

上一篇:STM32CubeMX实现流水灯


下一篇:STM32中使用HAL库重定向printf()函数