目录
上电时电压小于芯片POR电平,导致在线调试时运行代码正确重启电源代码运行不正确,通过在初始化前面加适当延时解决.
一、BUG现象
项目换了平台,移植代码的时候,现象是:
1、STM32板子烧写程序之后,重启电源,程序运行现象与预期的不符合;
2、为了排除重启电源板子没有复位,在进入主函数开始增加软件复位,测试结果和1一致;
3、使用Keil软件在线调试Dubug,程序运行符合预期,PB1和TXCAN均有正常波形输出。
二、测试代码和硬件原理图
运行的代码框架如下,首先初始化SPI3,再通过SPI3控制芯片MCP2517初始化,在主循环里面,每过20ms翻转一次PB1,并通过SPI控制MCP2517发送一次数据。
int main(void)
{
MX_SPI3_Init(); //SPI3控制CANFD芯片MCP2517
CANFDSPI_Init(); //初始化CAN FD
while(1)
{
HAL_Delay(20); //延时20ms
GPIO_PB1_CHANGE();//翻转PB1引脚查看程序是否在运行
test_fdcan_send();//测试CANFD发送
}
}
硬件原理图如图1所示,STM32通过SPI3控制MCP2517
![](https://i-blog.csdnimg.cn/blog_migrate/6f6d972da7abc1f3543aa70f1f3ae65b.gif)
预期的现象是烧写程序后:测试PB1引脚每20ms翻转一次,在MCP2517的1Pin-TXCAN1可以测试到发送的波形,但是重启电源发现只能测试到PB1引脚的波形20ms翻转一次(说明代码运行到主函数,刚开始猜想重启电源不能使代码运行,只有Debug才能使代码运行,但是重启电源和Debug都是复位板子,并且重启电源测试到了PB1翻转说明板子在运行,所以这个猜想排除掉</