笔记:STM32单片机开发中的一些注意点

笔记:STM32单片机开发中的一些注意点

可快速点击超链接查看对应型号的特(bug)性


STM32G0

1.PLL设置

STM32G0的PLL内部连线不可超过64M,否则芯片会锁死,原因未知。 当时为了搞ADC时钟,PLLP输出了80M给ADC,结果把芯片锁死了,无法烧录Flash。然而cubemx并没有报错,怀疑是芯片批次问题。 PLL见下图,内部连线不可超过64M。


2.IO复用设置

待补充


STM32H7

1.ADC数据只有2位

(H743)ADC采样后输出的数据只有2位,即ADC的高2位有变化,后n位全部为1 后查看代码,发现输入给ADC的时钟为200M(AHB总线),远大于ADC的允许频率。 将ADC输入时钟改为64M并二分频,问题解决。


2.ADC+DMA数据出错

上问题图 此时的输入为正弦波,显而易见,波形发生了严重的错误。 但可以发现,似乎是出错位置的波形出现错位。 排查代码后发现ADC与DMA都无出错,最后关闭了D-cache缓存后,数据正常,如图 同理,关于DMA的数据出错,可以尝试关闭CPU缓存来尝试解决。 此处使用正点原子的代码来开发程序,解决方法见下.

void Cache_Enable(void)
{
          
   
    SCB_EnableICache();	//使能I-Cache,函数在core_cm7.h里面定义
   //关闭D-cache 
 //   SCB_EnableDCache();	//使能D-Cache,函数在core_cm7.h里面定义 
//	SCB->CACR|=1<<2;	//强制D-Cache透写,如不开启透写,实际使用中可能遇到各种问题
}

之前在STM32F746的板子也出现过类似bug,但彼时未找到解决方案,估计可以通过上文的方法来解决。 同时需要注意,关闭缓存类型(D-cache/I-cache)需要基于出错代码或外设在内存中的储存位置。


3.DAC输出设置

STM32H735有两个DAC通道,PA4-DAC1,PA5-DAC2,这两个通道唯一绑定,如果初始化PA4而启用DAC2,那么DAC会在PA5输出而不是在PA4处输出

4.无法同步触发

STM32H735的ADC1,ADC2使用DMA循环模式时,当触发频率在2.5M以上时,无法同时触发波形,后改成单次触发模式,问题解决。 怀疑是因为乒乓传输过程中导致错位


待续...希望问题越少越好
经验分享 程序员 微信小程序 职场和发展