单片机开发遇到的坑和填坑办法
0 条评论一、IDE在线调试问题,点击调试遇到Fail to read registers,该问题有可能是设备当前运行的程序存在低功耗休眠的代码,导致芯片进入休眠状态无法调试,可以先暂时屏蔽低功耗代码进行相关工程代码的调试。
二、单片机时钟产生可以通过内部振荡器进行产生,也可以接入外部晶振,它们的区别在于:内部振荡器产生的时钟频率由于工艺问题会产生或多或少的偏差值,而外部晶振的误差非常小,但是会额外占用实际布板的面积;实际设计中需要根据具体需求进行选型。
三、调试技巧
1、波特率调试可以发送0x0a字符,然后使用示波器观察0101的电平跳变的周期,然后算出频率。
2、断点调试时,有可能会错过后续的中断;如串口接收数据时,断点在中断函数中,就会错过本次后续的中断信息及数据。
3、一条语句执行的耗时计算
1)在函数前将某一GPIO置高,函数执行完后将GPIO置低,通过示波器测量该IO的脉宽;
2)通过系统时钟计数器,函数执行前后对系统时钟进行计数采样,算出差值(注意时钟计数翻转问题),该方式精确度高。
四、当牵扯到DMA操作时,传入的地址必须是SRAM,而不能是其它如EFlash的地址,而且地址必须是对齐的;我之前在做证书认证时候为了节省内存资源,把EFlash的证书地址直接传入进行运算,发现在进行SM3运算时结果不对,最终定位到了上述DMA操作的情况,目前已解决。
五、在实际的两个ECU通信中,不管是串口通信还是SPI通信,都需要把两个ECU的GND接到一块,就是共地,不然会出现数据不一致的现象,谨记!
六、根据所使用的单片机采用位宽进行赋值拷贝优化,可以有效减少处理数据的时钟周期。