1. 串口基本介绍(332.36)
常用函数介绍
串口发送/接收函数:
- HAL_UART_Transmit(); 串口发送数据,使用超时管理机制
- HAL_UART_Receive(); 串口接收数据,使用超时管理机制
- HAL_UART_Transmit_IT(); 串口中断模式发送
- HAL_UART_Receive_IT(); 串口中断模式接收
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart,
uint8_t *pData, uint16_t Size, uint32_t Timeout)
作用:以阻塞的方式发送指定字节的数据
- 形参 1 :UART_HandleTypeDef 结构体类型指针变量
- 形参 2:指向要发送的数据地址
- 形参 3:要发送的数据大小,以字节为单位
- 形参 4:设置的超时时间,以ms单位
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,
uint8_t *pData, uint16_t Size)
作用:以中断的方式接收指定字节的数据
- 形参 1 是 UART_HandleTypeDef 结构体类型指针变量
- 形参 2 是指向接收数据缓冲区
- 形参 3 是要接收的数据大小,以字节为单位
此函数执行完后将清除中断,需要再次调用以重新开启中断。
串口中断回调函数:
- HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数
- HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //发送中断回调函数
- HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //接收中断回调函数
状态标记变量:
- USART_RX_STA(符合变量的命名规则下 可重新命名):
- 从 0 开始,串口中断接收到一个数据(一个字节)就自增 1。当数据读取全部 OK 时候(回车和换行符号来的时候),那么 USART_RX_STA 的最高位置 1,表示串口数据接收全部完毕了,然后 main 函数里面可以处理数据了。
- 从 0 开始,串口中断接收到一个数据(一个字节)就自增 1。当数据读取全部 OK 时候(回车和换行符号来的时候),那么 USART_RX_STA 的最高位置 1,表示串口数据接收全部完毕了,然后 main 函数里面可以处理数据了。
串口接收中断流程
2. 串口实验 (非中断)(333.37)
- 需求: 接受串口工具发送的字符串,并将其发送回串口工具。
- 硬件接线:
- TX – A10
- RX – A9
- gnd – gnd (5v 实测可以不接)
一定要记得交叉接线!!
- 串口配置:
- 选定串口
- 选择模式(异步通讯)
- 串口配置
- 使用MicroLIB库
从魔术棒打开,这个勾勾一定要打上,否则 printf 无法重映射!
- STM32CubeMx工程配置
- 串口调试助手的一些设置
- 代码(11.uart1_test/MDK-ARM)
#include <stdio.h>
#include <string.h>
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
int main(void)
{
unsigned char ch[20] = {
0};//char(acter)
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();//串口初始化
HAL_UART_Transmit(&huart1, (uint8_t *) "hello world\n", strlen("hello world\n"), 100);//超时100
while (1)
{
HAL_UART_Receive(&huart1, ch, 19