第十三届蓝桥杯嵌入式备赛-STM32G431-进阶模块调试⑥DAC输出

目录

0.前言

1.功能要求

电路原理图

2.STM32Cubemx初始化

 3.程序实现

 main.c相关初始化

DAC函数

DAC1_Out1_Vol()

DAC1_Out2_Vol()

4.工程文件


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

 

 自己做的笔记,也希望能对你有帮助! 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别人家的孩子380

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值