1、串口的基本配置
选择USART1,选择异步通信,设置波特率
选择后,会在右边点亮串口
串口引脚是用来与其他设备通信的,如在程序中打印发送信息,电脑上打开串口助手,就会收到信息。
串口的发送接收,建议使用中断,如图点击
2、串口的发送接收函数
HAL_UART_Transmit():串口发送数据,使用超时管理机制
HAL_UART_Receive():串口接收数据,使用超时管理机制
HAL_UART_Transmit_IT():串口中断模式发送
HAL_UART_Receive_IT():串口中断模式接收
HAL_UART_Transmit_DMA():串口DMA模式发送
HAL_UART_Transmit_DMA():串口DMA模式接收
如:串口发送
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16 , 0xffff);
3、串口重定义
在需要使用printf函数发送数据时,可以在所在文件添加串口重定义:
#include "stdio.h"
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
4、printf串口使用卡死问题
问题描述:
配置了串口,对printf函数也进行了重定义,编译的时候也没错,但下载进程序的时候就会死机。
如图:一旦使用printf函数,就会死机,使用HAL_UART_Transmit_IT串口发送就能正常进行。
解决方案:
点击魔法棒,勾选这个。然后就能使用printf函数打印输出了。
5、串口发送
使用HAL_UART_Transmit_IT串口发送
若对printf重定义后,可以使用printf发送:printf("ddd\r\n");
6、串口接收
串口接收需要定义串口接收回调函数;
先在int main主函数中,添加HAL_UART_Receive_IT(&huart1,(uint8_t *)&rxbuff1,1);串口接收函数,变量还得自己定义。
之后,在main主文件中,找个位置,定义串口接收回调函数。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart->Instance == USART1)
{
if (rxbuff1 == '\n')
{
printf("发送的数据是:%s\r\n",uart1_txbuff); //发送回显语句
uart1_rx_cnt = 0;
}
else
{
uart1_txbuff[uart1_rx_cnt]=rxbuff1;
uart1_rx_cnt ++;
}
HAL_UART_Receive_IT(&huart1,(uint8_t *)&rxbuff1,1);
}
}