目录
0.前言
这套教程针对于蓝桥杯嵌入式比赛的底层模块调试,针对于比赛进行每个模块的调试,低层模块调试好,对于赛题的实现就会方便很多,虽然有一些应试教育的意味,不过准备这个比赛对于程序整体实现思维还是有着很大帮助,我也从中受益颇多!
1.功能要求
使用DAC输出固定的电压值
电路原理图
2.STM32Cubemx初始化
将PA4设置为DAC1_OUT1,PA5设置为DAC1_OUT2
DAC1详细设置
3.程序实现
main.c相关初始化
main.c中创建DAC相关变量
/*main.c*/
uint16_t DAC_tt=0;//DAC输出计时标志位
uint16_t DAC_Ref=0;//DAC输出标志位
float DAC_Out1=0,DAC_Out2=0;//DAC输出的值
Task_Time()函数扩充,以执行定时设置DAC输出值(移步②,查看该函数)
/*main.c*/
void Task_Time(void)
{
if(++Key_tt==10) {Key_tt=0;Key_Ref=1;}//按键扫描计时
if(++Lcd_tt==200) {Lcd_tt=0;Lcd_Ref=1;}//LCD刷新计时
if(++ADC_tt==300) {ADC_tt=0;ADC_Ref=1;}//ADC读取计时
if(++MCP_tt==200) {MCP_tt=0;MCP_Ref=1;}//MCP写入计时
if(++DAC_tt==200) {DAC_tt=0;DAC_Ref=1;}//DAC输出计时
}
主循环中添加判断程序(DAC1_Out_Vol()之后会讲到)
/*main.c*/
while (1)
{
if(DAC_Ref==1)
{
DAC_Ref=0;//清除标志位
DAC1_Out1_Vol(DAC_Out1);
DAC1_Out2_Vol(DAC_Out2);
}
}
DAC函数
在dac.c中定义以下函数(函数讲解查看注释),并在dac.h中声明
/*dac.h*/
void DAC1_Out1_Vol(float vol);
void DAC1_Out2_Vol(float vol);
DAC1_Out1_Vol()
设置DAC1_Out1的输出
/*dac.c*/
void DAC1_Out1_Vol(float vol)
{
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);//开启DAC
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, vol*4096/3.3f);//选择DAC通道
}
DAC1_Out2_Vol()
设置DAC1_Out2的输出
/*dac.c*/
void DAC1_Out2_Vol(float vol)
{
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2);//开启DAC
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, vol*4096/3.3f);//选择DAC通道
}
相关函数定义位置stm43g4xx_hal_dac.c
/*stm43g4xx_hal_dac.c*/
HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel);
HAL_DAC_GetState(DAC_HandleTypeDef *hdac);
在Task.c中声明外部变量,通过改变变量值来修改输出电压啦
/*Task.c*/
extern float DAC_Out1,DAC_Out2;//DAC输出的值
4.工程文件
该工程文件为全10讲所有内容,可以作为参考,不过还是希望读者能够自己手敲一遍,加深记忆
链接:https://pan.baidu.com/s/1LcNszc7_oHWvXcucCezlxg?pwd=hw07
提取码:hw07
自己做的笔记,也希望能对你有帮助!