一.简单了解
串口模式实现有三种
1.普通模式:在主函数中接收函数
2.中断模式:产生的不影响主程序运行
3. DMA模式:与主函数互不影响,独立运行
本文记录第一种普通模式。
学习目标是:实现普通串口的数据收发,发送数据时LED灯电平翻转。
二.步骤
步骤1:在STM32CUBEMX中创建好工程,我这里用的是小熊派的STM32L431RCT6开发板,需要配置的有LED灯,PC13为output。uart1为异步收发全双工,时钟为80Mhz。
步骤2:打开工程文件,在uart.c中,包含标准头文件以及实现串口的重定向
#include "stdio.h"
int fputc(int ch,FILE* f)
{
uint8_t temp[1]={
ch};
{
HAL_UART_Transmit(&huart1,temp,1,2);
}
return HAL_OK;
}
步骤3:在stm32l4xx_hal_uart.h中的1608行找到如下两个函数:
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
步骤4:在main.c中,实现功能函数
首先包含标准头文件#include "stdio.h"
宏定义串口一:#define UART1
main函数中:
uint8_t Rdata;//变量用于存放接收到的数据
printf("welcome to uart1 test!\r\n");
while(1)
{
#ifdef UART1
//如果接收OK,那么把接收到的数据发送到串口数据里面,并反转LED灯。
if(HAL_UART_Receive(&huart1,&Rdata,1,0)==HAL_OK)
{
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
HAL_UART_Transmit(&huart1,&Rdata,1,0);
}
#endif
}