|
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();// 复位
}
|
|