本帖最后由 damiaa 于 2016-12-27 21:36 编辑
NUCLEO-stm32F413ZH评测一-----DAC程序试用篇
接着NUCLEO-stm32F413ZH评测一-----开箱篇开始唠叨
建议:熟悉STM32CUBEMX的网友喜欢直接用CUBE生成项目。其实也可以在ST官网下载en.stm32cubef4(好像没看到DAC的例子)
解压后有很多例子。和生成的一样,可以作为程序调用的参考。里面有IAR,K,GCC,SW4STM32等例子。读读无妨。
STM32程序架构
STM32CUBE生成的新的程序架构基本上都是这样子了:
当然还可以生成更复杂的,特别是当你选了FREERTOS和LWIP后。
GPIO和按键:GPIO输出基本就这样:
按键输入不同的就是把按键的IO设置为GPIO_MODE_INPUT
DAC
DAC这东西就是数字转模拟,对于stm32F413ZH来说有两路两路DAC STM32F072 091也都是两路.
构建这个程序分几步:
1,用STM32CUBEMX配置建个框架。
2,生成代码。
3,代码里面添加函数启动DAC。
用STM32CUBEMX配置建个框架
1,STM32CUBEMX里选NUCLEO-STM32F413ZH板子(这样方便多了,省事)
2,把两个DAC都用上(如果你只想用一个我不勉强
)
3,生成代码打开就用了DAC的初始化。这时我们要做的事就是添加下面的2,和3(1被STM32CUBEMX做了)
4,编译代码运行。
5,结果展示:
单个示波器通道测试一路
两个示波器通道测试两路。
下面是代码:
uart_dac_test.rar
(8.41 MB, 下载次数: 31)
评测结果:拿来即用,用了就会,方便!
关于DAC的理论问题
关于保持寄存器
1,DAC可以设置为8位模式和12位模式
2,DAC可以使用DMA输出数据。
3,DAC在STM32F43和072,091等设备中有两路。
4,因为第三点,所以有了对齐方式:左对齐,右对齐。(the data could be left- or right-aligned)
DAC_ALIGN_12B_R
DAC_ALIGN_12B_L
DAC_ALIGN_8B_R
看到这里我们有点糊涂了,怎么有1通道8为DAC_DHR8R1,有2通道8为DAC_DHR8R2的保持寄存器,还有DAC_DHR8RD双路的(16位)
看这里 Dual DAC channel for independent or simultaneous conversions 原来DAC的两个通道可以单独输出也可以同步输出。
所以12位的
左右对齐的保持寄存器也都是有3个。
关于触发
可以定时器2,4,5,6,7,8触发,也可以EXIT LINE9 配置外部IO触发,也可以软件启动触发。
不错都想到了。DMA就不讨论了,这个主要是为了速度,不如放些数据到内存,配置DMA,让他定时发出到DAC。
DAC还能产生噪声?
In order to generate a variable-amplitude pseudonoise, an LFSR (linear feedback shift
register) is available. DAC noise generation is selected by setting WAVEx[1:0] to “01”. The
preloaded value in LFSR is 0xAAA. This register is updated three APB1 clock cycles after
each trigger event, following a specific calculation algorithm.
是的,细节不讨论了。
DAC还能生成三角波?Triangle-wave generation是的
It is possible to add a small-amplitude triangular waveform on a DC or slowly varying signal.
DAC triangle-wave generation is selected by setting WAVEx[1:0] to “10”. The amplitude is
configured through the MAMPx[3:0] bits in the DAC_CR register. An internal triangle counter
is incremented three APB1 clock cycles after each trigger event. The value of this counter is
then added to the DAC_DHRx register without overflow and the sum is stored into the
DAC_DORx register. The triangle counter is incremented as long as it is less than the
maximum amplitude defined by the MAMPx[3:0] bits. Once the configured amplitude is
reached, the counter is decremented down to 0, then incremented again and so on.
对于
双通道也可以同步或者独立启动,同步或者独立产生噪声,同步或者独立使用生成三角波。
其实只要我们充分使用定时器和DAC,可以产生各种波形。大家试试无妨。
具体细节请看下面资料:
en.DM00305666.pdf
(14.19 MB, 下载次数: 28)
好了好了,也不知道大家都清楚了没有,反正我还是
一头雾水,似懂非懂。谢谢
所有这些都在
stm32f4xx_hal_dac.h
stm32f4xx_hal_dac.c
stm32f4xx_hal_dac_ex.c
三个文件中体现。
一句话,方便!