硬汉嵌入式论坛

 找回密码
 立即注册
查看: 354|回复: 7
收起左侧

[有问必答] IAP跳转到APP ,串口打印首字母乱码问题

[复制链接]

2

主题

12

回帖

18

积分

新手上路

积分
18
发表于 2024-2-28 11:43:32 | 显示全部楼层 |阅读模式
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();// 复位

}

回复

使用道具 举报

3

主题

119

回帖

128

积分

初级会员

积分
128
发表于 2024-2-28 13:33:06 | 显示全部楼层
bootloader也用到打印了吗,boot和app通信配置是否完全一致,比如停止位和奇偶校验位,bootloader打印完等一会再跳转,跳转之前清掉各种中断配置。
参考硬汉哥教程[BOOT/IAP] 实战技能分享,一劳永逸的解决BOOT跳转APP失败问题,含MDK AC5,AC6和IAR,同时制作了一个视频操作说明
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2024-2-28 15:13:19 | 显示全部楼层
skyshine 发表于 2024-2-28 13:33
bootloader也用到打印了吗,boot和app通信配置是否完全一致,比如停止位和奇偶校验位,bootloader打印完等 ...

boot loader用到了打印,前面几句都是在boot loader打印的,两边通信配置一致,乱码的地方在APP的第一句打印的第一个字,bootloader里面的打印都没有问题没乱码,IAP到APP的跳转也没问题,跳转之前关闭了总中断,关闭了串口中断,在APP重新打开的,跳转那块我没用硬汉哥的例程,串口用的硬汉哥的
回复

使用道具 举报

3

主题

119

回帖

128

积分

初级会员

积分
128
发表于 2024-2-28 15:58:27 | 显示全部楼层
看描述可能就是跳转这部分没搞好,没完全初始化,可以在app程序初始化打个断点看下跳转到app初始化的时候串口外设寄存器配置是不是默认值
回复

使用道具 举报

41

主题

214

回帖

337

积分

高级会员

积分
337
发表于 2024-2-28 21:11:13 | 显示全部楼层
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
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2024-3-1 10:32:59 | 显示全部楼层
skyshine 发表于 2024-2-28 15:58
看描述可能就是跳转这部分没搞好,没完全初始化,可以在app程序初始化打个断点看下跳转到app初始化的时候串 ...

找到问题了,是打印跟不上速度,加个一毫秒延时就好了,跳转之前如果有打印得加点延时再跳
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2024-3-1 10:34:58 | 显示全部楼层
snakeemail 发表于 2024-2-28 21:11
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)

like your code that check USART_FLAG_ ...

这段代码没问题,是printf比程序运行慢,加个1MS延时就好了
回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

积分
10
发表于 2024-3-1 16:34:33 | 显示全部楼层
YinFu 发表于 2024-3-1 10:34
这段代码没问题,是printf比程序运行慢,加个1MS延时就好了

我总觉得是你跳转后主频还没有稳定造成的UART波特率偏差才打印出错。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 19:50 , Processed in 0.181758 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表