这是一个卑微电子信息学员的开始
2月18日工作记录
这是学习stm32的第n天
寒假开始了,卑微电子信息学员开始了stm32的学习过程。
重做DAC
我发现在网上使用Stm32G系列的人很少,没有什么参考的例子
基础的DAC
使用的开发板:Stm32G431RB
简单的事物往往只需要简单的**
最简单的DAC
// An highlighted block
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
// 一句话完事,或者不设三角波,在使能DAC前设定输出值
HAL_DAC_SetValue(&hdac3, DAC_CHANNEL_2, DAC_ALIGN_12B_R, (1.0 / 3.3 * 4096));
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
时钟触发的DAC
count period 可以大一点 反正我2分频是没问题的(85M)
// 注意记得使能时钟
if (HAL_TIM_Base_Start(&htim15) != HAL_OK){
Error_Handler();
}
// An highlighted block
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
// 一句话完事,或者不设三角波,在使能DAC前设定输出值
HAL_DAC_SetValue(&hdac3, DAC_CHANNEL_2, DAC_ALIGN_12B_R, (1.0 / 3.3 * 4096));
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
时钟触发的DAC+DMA
左边word右边halfword
这个很重要 一般都是死在这里
// 注意记得使能时钟
#include "main.h"
uint16_t sinewave[60];
uint16_t i;
for(i=0;i<60;i++){
sinewave[i]=sin(i/60.0*2*3.1415926)*500+1000;
}
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1,(uint32_t *)sinewave,60,DAC_ALIGN_12B_R);
if (HAL_TIM_Base_Start(&htim15) != HAL_OK){
Error_Handler();
}
代码包见结尾
DAC+OPAMP 的进阶应用
如果直接用dac输出,波形的上端和下端极限值处都会有明显的失真(懂得都懂)
所以我们要使用运算放大器
我用的是ST官方卖的开发板:Stm32G431RB
dac配置如下
out2和out1一样 懒
opamp配置如下
opamp1和opamp3一样 懒
timer和上面基础的一样 懒
代码很简单
HAL_OPAMP_Start(&hopamp1);
HAL_DAC_Start(&hdac3, DAC_CHANNEL_1);
HAL_OPAMP_Start(&hopamp3);
HAL_DAC_SetValue(&hdac3, DAC_CHANNEL_2, DAC_ALIGN_12B_R, (1.0 / 3.3 * 4096));//这句话很有意思 ennn 看后面
HAL_DAC_Start(&hdac3, DAC_CHANNEL_2);
if (HAL_TIM_Base_Start(&htim15) != HAL_OK)
{
/* DAC conversion start error */
Error_Handler();
}
怎么加dam就和上面基础一样 懒
代码包见结尾
DAC+OPAMP 的发现
G系列还是挺有意思的
第一个有意思的发现是他的三角波是通过计数器累加实现的
所以如果设定输出三角波的时候HAL_DAC_SetValue就可以将三角波的初始值上调,同时,如果超出4096就会翻转(反正就是到下面 懂得都懂)就像我前面写的一样
第二个有意思的是不知道为什么我这块板子adc3的out1无法输出,明明和out2的配置一模一样(可能是那里的引脚复用);写了out1半年没反应,结果out2一下子就好了。辣鸡。。。
具体的文件嘛 一个是你直接问我要(我不一定在线)
或者直接问我买 哈哈哈哈哈 气不死你
https://download.csdn.net/download/mohaoyuan/15356110
本文仅供学习使用,禁止一切转载或调用,最终解释权由作者本人享有。