IAP跳转到APP ,串口打印首字母乱码问题
boot loader跳转到APP程序,首先打印检测到EEPROM,但是打印第一个汉字乱码,我改成字母也是乱码,前面加一个空格也是乱码上位机显示:
开始更新固件...
固件更新完成!
开始执行FLASH用户代码!!
?--已经检测到串行EEPROM-- :
只有第一个是乱码,尝试了网上不少方法,
第一种方法:
波特率现在是115200,改成9600,只是传输慢了,依然乱码。
第二种方法
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{}
这两句调换位置也没效果
第三种方法:
初始化顺序问题,我看硬汉哥这个顺序也没错
第四种方法:
__disable_irq();
__set_PRIMASK(1); /* 禁止全局中断 */
SCB->VTOR = FLASH_BASE | 0x2800; /* Vector Table Relocation in Internal FLASH. */
__enable_irq();//打开总中断
__set_PRIMASK(0); /* 使能全局中断 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
delay_init(); //延时函数初始化
LED_Init(); //初始化LED指示灯
bsp_InitUart(); //初始化串口
bsp_InitI2C(); /* 配置I2C总线 */
// bsp_InitKey(); /* 初始化按键 */
// bsp_InitTimer(); /* 初始化系统滴答定时器 (此函数会开中断) */
TIM_PWM_Init(255,9); //不分频。PWM频率=72000000/(256*10)=28.125Khz
memset(buf, 0, 32);
memset(buf2, 0, 32);
这个顺序不知道是不是有问题,还有其他原因导致第一个字乱码吗,APP跳转到IAP打印是没问题的,就是IAP跳APP有这个问题,附上APP跳到IAP用的软复位
void SoftReset(void) //软复位
{
__set_FAULTMASK(1); // 关闭所有中断
// TIM_DeInit(TIM2);
// TIM_DeInit(TIM3);
// TIM_DeInit(TIM4);
NVIC_SystemReset();// 复位
}
bootloader也用到打印了吗,boot和app通信配置是否完全一致,比如停止位和奇偶校验位,bootloader打印完等一会再跳转,跳转之前清掉各种中断配置。
参考硬汉哥教程 实战技能分享,一劳永逸的解决BOOT跳转APP失败问题,含MDK AC5,AC6和IAR,同时制作了一个视频操作说明 skyshine 发表于 2024-2-28 13:33
bootloader也用到打印了吗,boot和app通信配置是否完全一致,比如停止位和奇偶校验位,bootloader打印完等 ...
boot loader用到了打印,前面几句都是在boot loader打印的,两边通信配置一致,乱码的地方在APP的第一句打印的第一个字,bootloader里面的打印都没有问题没乱码,IAP到APP的跳转也没问题,跳转之前关闭了总中断,关闭了串口中断,在APP重新打开的,跳转那块我没用硬汉哥的例程,串口用的硬汉哥的 看描述可能就是跳转这部分没搞好,没完全初始化,可以在app程序初始化打个断点看下跳转到app初始化的时候串口外设寄存器配置是不是默认值 while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
like your code that check USART_FLAG_TC, there are another flag, you should try to check it too.
Good luck skyshine 发表于 2024-2-28 15:58
看描述可能就是跳转这部分没搞好,没完全初始化,可以在app程序初始化打个断点看下跳转到app初始化的时候串 ...
找到问题了,是打印跟不上速度,加个一毫秒延时就好了,跳转之前如果有打印得加点延时再跳 snakeemail 发表于 2024-2-28 21:11
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
like your code that check USART_FLAG_ ...
这段代码没问题,是printf比程序运行慢,加个1MS延时就好了 YinFu 发表于 2024-3-1 10:34
这段代码没问题,是printf比程序运行慢,加个1MS延时就好了
我总觉得是你跳转后主频还没有稳定造成的UART波特率偏差才打印出错。
页:
[1]