STM32F103 HAL库程序转换固件库及函数中文注释
//串口波特率 #define DEBUG_USART_BAUDRATE 115200
//串口接收缓冲数组大小 #define UART_RX_BUFFER_SIZE 256 extern unsigned char UART_RxBuffer[UART_RX_BUFFER_SIZE];
//引脚定义 /*******************************************************/ #define DEBUG_USART USART1 #define DEBUG_USART_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE();
#define RCC_PERIPHCLK_UARTx RCC_PERIPHCLK_USART1 #define RCC_UARTxCLKSOURCE_SYSCLK RCC_USART1CLKSOURCE_SYSCLK
#define DEBUG_USART_RX_GPIO_PORT GPIOB #define DEBUG_USART_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() #define DEBUG_USART_RX_PIN GPIO_PIN_7
#define DEBUG_USART_TX_GPIO_PORT GPIOB #define DEBUG_USART_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() #define DEBUG_USART_TX_PIN GPIO_PIN_6
#define DEBUG_USART_IRQHandler USART1_IRQHandler #define DEBUG_USART_IRQ USART1_IRQn
//将串口1复用到PB6\PB7上 #define DEBUG_USART_AF_ENABLE() __HAL_AFIO_REMAP_USART1_ENABLE() /************************************************************/
UART_HandleTypeDef UartHandle; //extern uint8_t ucTemp; //串口接收数组 unsigned char UART_RxBuffer[UART_RX_BUFFER_SIZE]; //串口接收数组指针 unsigned char UART_RxPtr; /**
@brief DEBUG_USART GPIO 配置,工作模式配置。115200 8-N-1 @param 无 @retval 无 */ void DEBUG_USART_Config(void) { UartHandle.Instance = DEBUG_USART;
UartHandle.Init.BaudRate = DEBUG_USART_BAUDRATE; UartHandle.Init.WordLength = UART_WORDLENGTH_8B; UartHandle.Init.StopBits = UART_STOPBITS_1; 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); }
/**
@brief UART MSP 初始化 @param huart: UART handle @retval 无 */ void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef GPIO_InitStruct; DEBUG_USART_CLK_ENABLE();
Copy DEBUG_USART_RX_GPIO_CLK_ENABLE(); DEBUG_USART_TX_GPIO_CLK_ENABLE();
DEBUG_USART_AF_ENABLE();
/**USART1 GPIO Configuration PA9 ------> USART1_TX PA10 ------> USART1_RX / / 配置Tx引脚为复用功能 */ GPIO_InitStruct.Pin = DEBUG_USART_TX_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStruct);
/* 配置Rx引脚为复用功能 */ GPIO_InitStruct.Pin = DEBUG_USART_RX_PIN; GPIO_InitStruct.Mode=GPIO_MODE_AF_INPUT; //模式要设置为复用输入模式! HAL_GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStruct);
HAL_NVIC_SetPriority(DEBUG_USART_IRQ ,0,1); //抢占优先级0,子优先级1 HAL_NVIC_EnableIRQ(DEBUG_USART_IRQ ); //使能USART1中断通道 }
/***************** 发送字符串 **********************/ 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)!='\0');
}
//清空发送缓冲 void uart_FlushRxBuffer(void) { UART_RxPtr = 0; UART_RxBuffer[UART_RxPtr] = 0; }
///重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数 int fputc(int ch, FILE f) { / 发送一个字节数据到串口DEBUG_USART */ HAL_UART_Transmit(&UartHandle, (uint8_t *)&ch, 1, 1000);
Copy return (ch); }
///重定向c库函数scanf到串口DEBUG_USART,重写向后可使用scanf、getchar等函数 int fgetc(FILE *f) {
Copy int ch; HAL_UART_Receive(&UartHandle, (uint8_t *)&ch, 1, 1000); return (ch); } #include 'stm32f1xx_hal.h' #include 'stdio.h'
#define DEBUG_USART_BAUDRATE 115200 #define UART_RX_BUFFER_SIZE 256 extern uint8_t UART_RxBuffer[UART_RX_BUFFER_SIZE];
#define DEBUG_USART USART1 #define DEBUG_USART_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE();
#define RCC_PERIPHCLK_UARTx RCC_PERIPHCLK_USART1 #define RCC_UARTxCLKSOURCE_SYSCLK RCC_USART1CLKSOURCE_SYSCLK
#define DEBUG_USART_RX_GPIO_PORT GPIOB #define DEBUG_USART_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() #define DEBUG_USART_RX_PIN GPIO_PIN_7
#define DEBUG_USART_TX_GPIO_PORT GPIOB #define DEBUG_USART_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() #define DEBUG_USART_TX_PIN GPIO_PIN_6
#define DEBUG_USART_IRQHandler USART1_IRQHandler #define DEBUG_USART_IRQ USART1_IRQn
#define DEBUG_USART_AF_ENABLE() __HAL_AFIO_REMAP_USART1_ENABLE()
UART_HandleTypeDef UartHandle; uint8_t UART_RxBuffer[UART_RX_BUFFER_SIZE]; uint8_t UART_RxPtr;
void DEBUG_USART_Config(void) { UartHandle.Instance = DEBUG_USART; UartHandle.Init.BaudRate = DEBUG_USART_BAUDRATE; UartHandle.Init.WordLength = UART_WORDLENGTH_8B; UartHandle.Init.StopBits = UART_STOPBITS_1; 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); }
void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef GPIO_InitStruct; DEBUG_USART_CLK_ENABLE(); DEBUG_USART_RX_GPIO_CLK_ENABLE(); DEBUG_USART_TX_GPIO_CLK_ENABLE(); DEBUG_USART_AF_ENABLE();
GPIO_InitStruct.Pin = DEBUG_USART_TX_PIN; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = DEBUG_USART_RX_PIN; GPIO_InitStruct.Mode=GPIO_MODE_AF_INPUT; HAL_GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStruct);
HAL_NVIC_SetPriority(DEBUG_USART_IRQ ,0,1); HAL_NVIC_EnableIRQ(DEBUG_USART_IRQ ); }
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)!='\0'); }
void uart_FlushRxBuffer(void) { UART_RxPtr = 0; UART_RxBuffer[UART_RxPtr] = 0; }
int fputc(int ch, FILE *f) { HAL_UART_Transmit(&UartHandle, (uint8_t *)&ch, 1, 1000); return (ch); }
int fgetc(FILE *f) { int ch; HAL_UART_Receive(&UartHandle, (uint8_t *)&ch, 1, 1000); return (ch); }
原文地址: http://www.cveoy.top/t/topic/o4vK 著作权归作者所有。请勿转载和采集!