完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、UART #ifndef BSP_USART_H #define BSP_USART_H #include "stm32f1xx.h" #include //串口波特率 #define DEBUG_USART_BAUDRATE 115200 //引脚定义 /*******************************************************/ #define DEBUG_USART USART1 #define DEBUG_USART_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE() #define DEBUG_USART_RX_GPIO_PORT GPIOA #define DEBUG_USART_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() #define DEBUG_USART_RX_PIN GPIO_PIN_10 #define DEBUG_USART_TX_GPIO_PORT GPIOA #define DEBUG_USART_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() #define DEBUG_USART_TX_PIN GPIO_PIN_9 #define DEBUG_USART_IRQHandler USART1_IRQHandler #define DEBUG_USART_IRQ USART1_IRQn void Usart_SendString(uint8_t *str); void DEBUG_USART_Config(void); int fputc(int ch, FILE *f); int fgetc(FILE *f); extern UART_HandleTypeDef UartHandle; #endif #include "bsp_usart.h" // UartHandle管理串口所有配置 UART_HandleTypeDef UartHandle; //配置与硬件底层无关内容:如串口协议,其中包括波特率,奇偶校验,停止位 void DEBUG_USART_Config() { UartHandle.Instance = DEBUG_USART; //波特率,8位字长,1停止位,无奇偶校验,无硬件控制,收发模式 UartHandle.Init.BaudRate = DEBUG_USART_BAUDRATE; UartHandle.Init.WordLength = UART_WORDLENGTH_8B; UartHandle.Init.StopBits = UART_STOPBITS_1;//stm32f1xx_hal_uart.h UartHandle.Init.Parity = UART_PARITY_NONE; UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; UartHandle.Init.Mode = UART_MODE_TX_RX; HAL_UART_Init(&UartHandle); //使能串口接收中断 __HAL_UART_ENABLE_IT(&UartHandle,UART_IT_RXNE); } // mcu 底层硬件相关的配置如引脚、时钟、DMA、中断 //实际被HAL_UART_Init(stm32f1xx_hal_uart.c)该函数调用 void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef GPIO_Init; //串口时钟 GPIO时钟 DEBUG_USART_CLK_ENABLE(); DEBUG_USART_RX_GPIO_CLK_ENABLE(); DEBUG_USART_TX_GPIO_CLK_ENABLE(); //配置引脚复用功能 TX GPIO_Init.Pin = DEBUG_USART_TX_PIN; GPIO_Init.Mode = GPIO_MODE_AF_PP; GPIO_Init.Pull = GPIO_PULLUP; GPIO_Init.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_Init); //配置Rx GPIO_Init.Pin = DEBUG_USART_RX_PIN; GPIO_Init.Mode = GPIO_MODE_AF_INPUT;//复用输入模式 HAL_GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_Init); HAL_NVIC_SetPriority(DEBUG_USART_IRQ ,0,1); //抢占优先级0,子优先级1 HAL_NVIC_EnableIRQ(DEBUG_USART_IRQ ); //使能USART1中断通道 } /***************** 发送字符串 **********************/ /* HAL_UART_Transmit 函数(这是一个阻塞的发送函数,无需重复判断串口是否发送完成) 发送每个字符,直到遇到 空字符才停止发送。*/ void Usart_SendString(uint8_t *str) { unsigned int k=0; do { HAL_UART_Transmit(&UartHandle,(uint8_t *)(str + k) ,1,1000); k++; } while(*(str + k)!=' |