说明:
轮询 polling方法
更改自小华HC32官方库DDL_2.2.0版本
相关宏定义
/* 串口 */
#define USART_RX_PORT (GPIO_PORT_B) /* PH13: USART1_RX */
#define USART_RX_PIN (GPIO_PIN_15)
#define USART_RX_GPIO_FUNC (GPIO_FUNC_33)#define USART_TX_PORT (GPIO_PORT_B) /* PH15: USART1_TX */
#define USART_TX_PIN (GPIO_PIN_14)
#define USART_TX_GPIO_FUNC (GPIO_FUNC_32)/* USART unit definition */
#define USART_UNIT (CM_USART1)
引脚可以参照HC32F4A0数据手册里的引脚功能表自由定义
初始化
void USART_Init()
{stc_usart_uart_init_t stcUartInit;/* Set TX port function */GPIO_SetFunc(USART_TX_PORT, USART_TX_PIN, USART_TX_GPIO_FUNC);GPIO_SetFunc(USART_RX_PORT, USART_RX_PIN, USART_RX_GPIO_FUNC);/* Enable clock */FCG_Fcg3PeriphClockCmd(FCG3_PERIPH_USART1, ENABLE);USART_UART_StructInit(&stcUartInit);stcUartInit.u32ClockDiv = USART_CLK_DIV64;stcUartInit.u32OverSampleBit = USART_OVER_SAMPLE_8BIT;stcUartInit.u32Baudrate = 115200ul;(void)USART_UART_Init(USART_UNIT, &stcUartInit, NULL);USART_FuncCmd(USART_UNIT, USART_RX | USART_TX, ENABLE);// uint8_t buf[] = "hello world!\n";
// USART_UART_Trans(USART_UNIT, buf, sizeof(buf), 1000);
}
串口printf使用 重定向fputc函数
修改hc32_ll_utility.c文件中的fputc函数,把默认的注释掉就行
参考博客:HC32F4A0串口重定义printf
/*** @brief Re-target fputc function.* @param [in] ch* @param [in] f* @retval int32_t*/
//int32_t fputc(int32_t ch, FILE *f)
//{
// (void)f; /* Prevent unused argument compilation warning */
//
// return (LL_OK == DDL_ConsoleOutputChar((char)ch)) ? ch : -1;
//}int32_t fputc(int32_t ch, FILE *f)
{(void)f; /* Prevent unused argument compilation warning */while(USART_GetStatus(CM_USART1, USART_FLAG_TX_EMPTY) == RESET);USART_WriteData(CM_USART1,(char)ch);return ch;
}
主循环中调用
例程里的,功能是将RX接收到的数据原样从TX发出
int32_t main(void)
{/* Peripheral registers write unprotected */LL_PERIPH_WE(EXAMPLE_PERIPH_WE);/* Configure BSP */BSP_Config();/* Peripheral registers write protected */LL_PERIPH_WP(EXAMPLE_PERIPH_WP);printf("hello");for (;;) {
// printf("hello");
// USART_WriteData(CM_USART1, 'a');if (SET == USART_GetStatus(USART_UNIT, USART_FLAG_RX_FULL)) {uint16_t u16RxData = USART_ReadData(USART_UNIT);/* Wait Tx data register empty */while (RESET == USART_GetStatus(USART_UNIT, USART_FLAG_TX_EMPTY)) {}USART_WriteData(USART_UNIT, u16RxData);}}
}