开发板:普中A7板子
核心板:STM32F103C8T6
HAL库版本:STM32Cube_FW_F1_V1.8.0
注意事项:
1、在HAL_UART_MspInit()函数中不能使用HAL_UART_Receive_IT()或HAL_UART_Transmit_IT()函数,否则不会进入中断处理函数中,也就是说设置中断无效;
2、在HAL_UART_RxCpltCallback()回调函数中不能使用HAL_UART_Transmit_IT()进行发送数据,否则发送出去的就是乱码’?'这个符号;
3、在HAL_UART_Transmit(&UART_Struct,recv_buf,50,1000)这个函数中参数50会导致输出一部分字符后卡死;只能设置为HAL_UART_Transmit(&UART_Struct,recv_buf,1,1000)参数为1;
4、如果在HAL_UART_RxCpltCallback()函数中使用HAL_UART_Transmit()来发送数据,串口调试助手发送数据到单片机点快一点的话 就会卡死,而使用直接写寄存器发就不会卡死;在printf重定位中的fputc()函数中使用HAL_UART_Transmit()来发送数据,并在main()主函数中的while(1)死循环里面只用printf()函数打印数据就不会出现卡死的情况;
5、不能在USART1_IRQHandler()中断处理函数中使用HAL_UART_Receive()和HAL_UART_Transmit()函数,因为这两个是阻塞式的容易造成程序卡死
/****************************************************************************************
* 函数功能:main主函数
* 参 数:
* 返 回 值:
* 注意事项:
***************************************************************************************/
int main(void)
{
unsigned char i, j = 0;
HAL_Init();
SystemClock_Config();
UART_Init();
Led_Init();
printf("This is test function\r\n");
while (1)
{
printf("Hello World %d\r\n", j++);
// for(i=0; i<8; i++)
// {
// LED_ON(i);
// HAL_Delay(500);
// LED_OFF(i);
// }
}
}
/**
* @brief System Clock Configuration
* The system Clock is configured as follow :
* System Clock source = PLL (HSI)
* SYSCLK(Hz) = 72000000
* HCLK(Hz) = 72000000
* AHB Prescaler = 1
* APB1 Prescaler = 2
* APB2 Prescaler = 1
* PLLMUL = 9
* Flash Latency(WS) = 2
* @param None
* @retval None
*/
void SystemClock_Config(void)
{
RCC_ClkInitTypeDef clkinitstruct = {
0};
RCC_OscInitTypeDef oscinitstruct