UART 使用
波特率和信号频率的关系
9600 波特率
115200 GPIO翻转速度
串口芯片一般有如下图所示的串口模块,我这边就是直接做在板子上的
1. 硬件连接
这个原理图是选用了 CH340N 作为串口传输的芯片,
2. CubeMX生成代码
外部晶振配置
SWD接口配置
如果不配置,会导致之后无法下载代码,请一定注意!!
串口的代码配置
时钟配置
工程配置
需要注意的是,工程中都不能有中文的字符,否则有可能导致无法生成代码,或者keil debug的时候出现卡死的情况,
3. 编写代码
串口的重定向,函数代码,如果你使用的不是串口1 ,则需要修改串口信息
C
/* USER CODE BEGIN 0 */
#include <stdio.h>
//重定向c库函数printf到串口USARTx,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
/* 发送一个字节数据到串口USARTx */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return (ch);
}
//重定向c库函数scanf到串口USARTx,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
int ch;
/* 等待串口输入数据 */
while (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) == RESET);
HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return (ch);
}
void ShowHex(uint8_t *buf,uint8_t len)
{
uint8_t i;
printf("hex = ");
for( i = 0; i < len; i++){
printf(" %02X",buf[i]); //使用前导0补齐
//printf(" %2X",buf[i]); //使用前导空格补齐
//printf(" %X",buf[i]); //输出最短的16进制格式
}
printf( "\r\n");
}
/* USER CODE END 0 */
串口实现收发一个函数的代码
C
while (1)
{
/* USER CODE END WHILE */
uint8_t ch[10];
/* 等待串口输入数据 */
while (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) == RESET);
HAL_UART_Receive(&huart1, (uint8_t *)&ch, 10, 0x2F);
printf("接收到字符:%s \r\n",ch);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */