在线调试时运行代码正确、关闭重启电源代码运行不正确

目录

一、BUG现象

二、测试代码和硬件原理图

 三、故障复现

四、优化延时时间 

五、总结


上电时电压小于芯片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

图1

预期的现象是烧写程序后:测试PB1引脚每20ms翻转一次,在MCP2517的1Pin-TXCAN1可以测试到发送的波形,但是重启电源发现只能测试到PB1引脚的波形20ms翻转一次(说明代码运行到主函数,刚开始猜想重启电源不能使代码运行,只有Debug才能使代码运行,但是重启电源和Debug都是复位板子,并且重启电源测试到了PB1翻转说明板子在运行,所以这个猜想排除掉</

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
带SPI接口的外部CAN FD控制器 特性 通用 • 带SPI接口的外部CAN FD控制器 • 最高1 Mbps的仲裁比特率 • 最高8 Mbps的数据比特率 • CAN FD控制器模式 - CAN 2.0B和CAN FD混合模式 - CAN 2.0B模式 • 符合ISO 11898-1:2015 报文FIFO • 31个FIFO,可配置为发送或接收FIFO • 1个发送队列(Transmit Queue, TXQ) • 带32位间戳的发送事件FIFO(Transmit Event FIFO, TEF) 报文发送 • 报文发送优先级: - 基于优先级位域,和/或 - 使用发送队列(Transmit Queue, TXQ)先发 送ID最小的报文 • 可编程自动重发尝试:无限制、 3次尝试或禁止 报文接收 • 32个灵活的过滤器和屏蔽器对象 • 每个对象均可配置为过滤: - 标准ID + 前18个数据位或 - 扩展ID • 32位间戳 特殊功能 • VDD: 2.7V至5.5V • 工作电流:最大20 mA(5.5V, 40 MHz CAN钟) • 休眠电流: 10 µA(典型值) • 报文对象位于RAM中: 2 KB • 最多3个可配置中断引脚 • 总线健康状况诊断和错误计数器 • 收发器待机控制 • 帧起始引脚,用于指示总线上报文的开头 • 温度范围: - 高温(H): –40°C至+150°C 振荡器选项 • 40、 20 或 4 MHz 晶振或陶瓷谐振器;或外部钟 输入 • 带预分频器的钟输出 SPI接口 • 最高20 MHz SPI钟速度 • 支持SPI模式0,0和1,1 • 寄存器和位域的排列方式便于通过SPI高效访问 安全关键型系统 • 带CRC的SPI命令,用于检测SPI接口上的噪声 • 受纠错码(Error Correction Code, ECC)保护的 RAM 其他特性 • GPIO引脚: INT0和INT1可配置为通用I/O • 漏极开路输出: TXCAN、 INT、 INT0 和 INT1 引脚 可配置为推/挽或漏极开路输出

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值