目录
本篇博客的主要作用是方便学校战队的低年级同学在学习培训过后能够随时将讲过的知识复习整理,故将部分内容整理为博客。除此之外,也希望与广大学习单片机的网友一起讨论进步。
前言
在对单片机进行二次应用开发时,使用了STM32CUBEMX与KEIL5这两个软件,主要方便对于单片机某些功能的初始化。后面的内容都将基于这两个软件进行展开。
串口简介
串行通信的分类:单工,半双工,全双工
同步通信和异步通信
同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
一般在使用串口的时候会选择USART,全称为Universal Synchronous/Asynchronous Receiver/Transmitter,中文名为通用同步/异步接收发送器,是一种非常强大的串行通信接口,它支持全双工的串行数据传输。
串口例程
目标:实现串口发送指定信号(比如说数特定的数字)驱动板子上LED灯的亮灭,并且在LED灯状态变化后在串口调试助手上返回一串提示字符串。
软硬件设备要求
硬件要求:STM32F103C8T6,无线串口收发器(WIFI)
软件要求:STM32CUBEMX,KEIL5,XCOM串口调试助手
CUBEMX串口配置
RCC
SYS
USART1
Mode选择异步Asynchronous,波特率可以自己定但是要和XCOM串口调试助手保持一致才能通信。
GPIO
配置一个连接着LED灯的输出高低电平的gpio口,用来控制LED灯的亮灭。
NVIC
一定要记住在NVIC打开串口的全局中断。
时钟树
配置完所有的东西之后就可以点击右上角生成代码了。
串口相关函数解析
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
其中:
huart:UART句柄,参数需要我们填写使用的外设。
pData:指针指向数据储存缓冲区,用来储存接收到的数据。
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
其中:
huart:UART句柄,参数需要我们填写使用的外设。
pData:需要发送的数据缓冲区指针。
Size:发送数据的长度。
Timeout:发送超时的时间
代码
代码中最重要的部分就是这个串口的回调函数,判断串口收到cmd之后将LED灯亮灭状态翻转。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1){
if(cmd == 0xA1){
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
HAL_UART_Transmit(&huart1, "Toggle!\r\n", sizeof("Toggle!\r\n"),10000);
}
HAL_UART_Receive_IT(&huart1, &cmd, 1);
}
}
效果
1.LED灯的亮灭变化
2.XCOM串口调试助手在发出指定信号后窗口返回Toggle!