Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DAC
RT-Thread
stm32F4
基于RT-Thread的STM32F4开发第三讲——DAC
发布于 2025-05-13 22:59:16 浏览:181
订阅该版
[tocm] # 基于RT-Thread的STM32F4开发第三讲——DAC --- # 前言 本章利用RT-Thread最新的驱动5.1.0开发DAC模块,使用的开发板是正点原子的STM32F4探索者。很多配置和上文重复,本文不再重复叙述。 --- # 一、DAC是什么? DAC 是 Digital-to-Analog Converter 的缩写,即数模转换器。它是一种电子设备,用于将数字信号(通常是二进制代码)转换为连续的模拟信号(如电压或电流)。在嵌入式系统、通信设备、音频系统等领域有广泛应用。 在STM32F4中DAC 模块是12 位电压输出数模转换器。DAC 可以按 8 位或 12 位模式进行配置,并且可与 DMA 控制器配合使用。在 12 位模式下,数据可以采用左对齐或右对齐。DAC 有两个输出 通道,每个通道各有一个转换器。在 DAC 双通道模式下,每个通道可以单独进行转换;当 两个通道组合在一起同步执行更新操作时,也可以同时进行转换。可通过一个输入参考电压引脚 VREF+ (与 ADC 共享)来提高分辨率。 # 二、RT-Thread工程创建 首先得到一个RT-Thread的STMF4系列驱动5.1.0不报错工程([RT-Thread studio的驱动5.1.0报错修改](https://blog.csdn.net/weixin_58172114/article/details/147677313?spm=1001.2014.3001.5502)) 参考上文使用cubemx配置好外设和时钟[基于RT-Thread的STM32F4开发第二讲第一篇——ADC](https://blog.csdn.net/weixin_58172114/article/details/147746898?spm=1001.2014.3001.5502)  如图,这是DAC外设的配置。配置好后生成工程 RT-Thread外设初始化整体的流程差不过。 1. RT-Thread Settings外设开启 2. 在board.h中预定义宏 3. 在board.c中粘贴函数HAL_xxx_MspInit和HAL_xxx_MspDeInit 4. 在stm32xxxx_hal_config.h使能HAL库外设宏定义 其中第四步cubemx创建工程时已经完成了,不需更改了。其他配置如图  然后进入board.h文件,预定义DAC1的宏,这个文件没有像其他外设(如ADC)预先定义好再注释DAC的宏,需要我们手动添加。  将函数`void HAL_DAC_MspInit(DAC_HandleTypeDef* dacHandle)`和`void HAL_DAC_MspDeInit(DAC_HandleTypeDef* dacHandle)`粘贴到board.c中,具体操作看上文。 用cubemx生成的dac.c文件中的函数`void MX_DAC_Init(void)`,去dac_donfig.h和drv_dac.c中对比初始化配置,更新或补全外设初始化    注意drv_dac.c使用了很多预编译指令,如果你的芯片型号不在其中,要手动添加进去。 以上配置好后,工程不报错就可以编写DAC工作函数了 # 三、DAC函数编写 下面是DAC输出电压计算公式,函数`rt_dac_write(dac_handle, DAC_CHANNEl, dac_value)`的参数dac_value值就是DOR的值。  ## 1.DAC.c ```c #include "DAC.h" #include "stdlib.h" #define DBG_TAG "dac" #define DBG_LVL DBG_INFO #include
#define DAC_ANME "dac1" #define DAC_CHANNEl 1 rt_dac_device_t dac_handle; void DAC_int(void) { dac_handle = (rt_dac_device_t)rt_device_find(DAC_ANME); if(dac_handle == RT_NULL) { LOG_I("failed to dac handle find"); return; } if(rt_dac_enable(dac_handle, DAC_CHANNEl) != RT_EOK){ LOG_I("failed to dac handle enable"); return; } if(rt_dac_write(dac_handle, DAC_CHANNEl, 2000) != RT_EOK){ LOG_I("failed to dac output set"); return; } LOG_I("success to dac handle init"); return; } void dac_voltage(int argc,char **argv) { static int dac_value = 0; dac_value = atoi(argv[1]); if(dac_value>=0 && dac_value<4096){ if(rt_dac_write(dac_handle, DAC_CHANNEl, dac_value) != RT_EOK){ LOG_I("failed to dac output voltage change"); return; } } else { LOG_I("input value error"); } } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(dac_voltage, dac voltage convert sample); ``` ## 2.DAC.h ```c #ifndef APP_ADC_H_ #define APP_ADC_H_ #include
#include
int adc_init(void); int adc_thread_init(void); #endif /* APP_ADC_H_ */ ``` ## 3.main.c ```c #include
#define DBG_TAG "main" #define DBG_LVL DBG_LOG #include
#include "DAC.h" int main(void) { DAC_int(); while (1) { rt_thread_mdelay(1000); } return RT_EOK; } ``` # 四、结果测试 经过测试,输入的dac_value在0——4095之间,PA4引脚能输出0.15V——3.29V。如果后面结合硬件定时器可以使用DAC的高级功能——输出特定波形 # 五、工程分享 通过网盘分享的文件:IO_DAC.zip 链接: https://pan.baidu.com/s/121vVZVeXfjvNNqQjDr9_aA?pwd=jykw 提取码: jykw ---
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Pai同学
这家伙很懒,什么也没写!
文章
10
回答
1
被采纳
0
关注TA
发私信
相关文章
1
RT-THREAD在STM32H747平台上移植lwip
2
正点原子miniSTM32开发板读写sdcard
3
反馈rtt串口驱动对低功耗串口lpuart1不兼容的问题
4
Keil MDK 移植 RT-Thread Nano
5
RT1061/1052 带 RTT + LWIP和LPSPI,有什么坑要注意吗?
6
RT thread HID 如何收发数据
7
求一份基于RTT系统封装好的STM32F1系列的FLASH操作程序
8
RT-Thread修改项目名称之后不能下载
9
rt-studio编译c++
10
有木有移植rt-thread(nano)到riscv 32位MCU上
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
6
五分钟玩转RT-Thread新社区
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
Bootloader
AT
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
UART
cubemx
ESP8266
ota在线升级
WIZnet_W5500
BSP
PWM
packages_软件包
flash
freemodbus
潘多拉开发板_Pandora
GD32
ADC
keil_MDK
定时器
flashDB
编译报错
ulog
socket
rt_mq_消息队列_msg_queue
msh
中断
Debug
SFUD
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
821
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部