1.配置引脚
原理图上串口的两个引脚为PA9、PA10
2.代码实现
注意: TMD系统时钟配置函数SystemClock_Config(); 最好是放在main函数开头的位置,放在所有其他模块init函数之前,要不然tmd会产生非常玄学的问题,比如串口发送的是乱码,还尼玛死活看不出来。
void Uart_Func()
{
if (uwTick - Uart_Delay_uwTick < 1000) return;
Uart_Delay_uwTick = uwTick;
sprintf(str, "hello,world!\r\n");
HAL_UART_Transmit(&huart1, (unsigned char *)str, strlen(str), 50);
}
USART1_Init();
HAL_UART_Receive_IT(&huart1, rec_str, 1);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
Led_Disp(0xaa);
HAL_Delay(300);
Led_Disp(0x00);
HAL_UART_Receive_IT(&huart1, rec_str, 1);
}
3. 注意事项
如果在串口中断里面调用HAL_Delay() 函数,则串口中断的优先级必须比滴答定时器的优先级低;因为HAL_Delay() 函数是由滴答定时器写的,如果串口优先级比滴答定时器优先级高,则程序会卡住
HAL_NVIC_SetPriority(USART1_IRQn, 1, 0);
HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);
滴答定时器优先级怎么找?👇
|