问题:使用hal库生成的DAC代码,DAC1输出正常,DAC2无输出。
排查过程:看stm32H7的手册,发现DAC1和DAC2不在同一内存地址上,觉得有点奇怪,进一步看,发现两者的时钟总线不同,
DAC1使用的是APB1
DAC2使用的是APB4
而我的HAL库版本是1.9.1,当下最新的HAL库版本是1.11.1
1.9.1生成的代码是这样使能这两个DAC时钟的:__HAL_RCC_DAC12_CLK_ENABLE();进去看这个宏函数的原型,
写的是使能DAC12的总线时钟,但是实际仅使能了DAC1的时钟。
解决办法:
解决1:自己写代码修改总线使能。
解决2:更新HAL重新生成代码。
当然我会选择最简单的第二种方法。更新HAL库以后,生成DAC2的时候,代码如下
__HAL_RCC_DAC2_CLK_ENABLE();的实现如下:
这样DAC2的时钟就使能了,外设就可以使用了。