问题描述
在stm32上实现了IAP功能,当IAP程序与APP程序都使用Keil编译工具进行编译链接时,APP程序能够正常工作。但是IAP程序使用Keil编译,APP程序使用gcc-arm-none-eabi交叉编译工具链进行编译时,下载下去后GPIO能正常工作,但是串口发送时总是卡在这一句:
void USART3_putchar(char data)
{
while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET); //卡在这里
USART_SendData(USART3, (uint16_t)data);
}
解决办法
在APP串口初始化开始前先DeInit一次,将串口恢复到默认的状态,然后再进行初始化。不管IAP程序对串口做了什么设置,都不会影响到APP的设置。
void USART3_Configuration( unsigned int BaudRate)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef USART_ClockInitStructure;
USART_DeInit(USART3); //在这里增加
// USART3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // USART3 TX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;