恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

【STM32C5教程】(9)DAC 模拟量信号输出实验

  • 首页
  • 资讯中心
  • /
  • 【STM32C5教程】(9)DAC 模拟量信号输出实验

相关资讯

AI写作降痕指南:从检测原理到8类工具与五轮修改 2026/10/18 6:06:30
基于OpenCV的人脸识别考勤系统:从检测、识别到GUI落地全指南 2026/10/18 6:06:30
Claude Haiku真实能力解析:轻量级大模型的成本与长文本实践 2026/10/18 6:06:30

最新资讯

PyTorch实现Deep Dream:CNN可视化与梯度上升的完整指南
迪奥口红礼盒套装图片背后:一张图能骗多少实体店老板,车间验货只看三个公差
SpringBoot启动报错Error creating bean?一文掌握Bean创建原理与排查攻略
广义Benders分解求解综合能源系统优化规划:建模、算法与Matlab实现
梯度下降原理与实战:从学习率到优化器,彻底搞懂深度学习训练
大一新生避坑指南:从学习模式到时间管理的系统策略

今日推荐

基于GMM的语音识别系统原理与MATLAB实现详解
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

本周热门

基于GMM的语音识别系统原理与MATLAB实现详解
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

【STM32C5教程】(9)DAC 模拟量信号输出实验

发布时间:2026/10/18 6:06:30
【STM32C5教程】(9)DAC 模拟量信号输出实验 欢迎关注 youcansxidian【嵌入式软件AI编程】专栏【STM32C5教程】4GPIO 外部中断实验【STM32C5教程】5定时器周期中断实验【STM32C5教程】6定时器 PWM 输出实验【STM32C5教程】7TIM1 互补 PWM 输出实验【STM32C5教程】8ADC 模拟量数据采集实验【STM32C5教程】9DAC 模拟量信号输出实验1. 项目简介1.1 实验目标本实验在 NUCLEO-C542RC 开发板上使用 STM32C542RCT6 的 DAC1 通道 1 经 PA4 引脚输出模拟电压周期性更新 DAC 转换值以生成锯齿波并通过 PA5 引脚指示锯齿波的输出周期。功能需求使用 DAC1 通道 1 经 PA4 输出模拟电压0 ~ 3.3 V对应 12 位数值 0 ~ 4095采用无触发软件触发方式由程序周期性更新 DAC 转换值生成锯齿波通过 PA5 引脚指示锯齿波的输出周期在锯齿波达到最大值回绕时翻转 PA5输出与锯齿波同步的方波锯齿波与周期指示均为纯软件实现无中断、无 DMA 参与开发板和 MCU 型号NUCLEO-C542RC 开发板搭载 STM32C542RCT6 MCU。1.2 实验条件硬件NUCLEO-C542RC 开发板支持数据传输的 USB Type-C 线用于连接 ST-LINK 接口示波器用于观测 PA4 与 PA5 的输出波形软件STM32CubeMX2用于引脚、时钟、ADC 配置与代码生成VS Code STM32Cube 插件用于编译、烧录、调试2. 硬件说明2.1 NUCLEO-C542RC 开发板NUCLEO-C542RC 是 ST 基于 STM32C542RCT6 推出的 Nucleo-64 开发板。主要特性MCUSTM32C542RCT6Arm Cortex-M33 内核最高主频 144 MHz256 KB Flash64 KB RAM调试器板载 STLINK-V3EC支持大容量存储、虚拟串口和调试端口三种功能用户 LEDLD1连接 PA5用户按键B1连接 PC13扩展接口Arduino Uno V3 和 ST morpho 连接器本实验使用 PA4 作为 DAC 模拟输出PA5 作为周期指示信号通过示波器观测。2.2 引脚说明引脚功能说明PA4DAC1_OUT1DAC1 通道 1模拟输出PA5LD1板载用户 LEDGPIO 推挽输出作为周期指示PA4DAC1_OUT1配置为模拟输出。DAC1 通道 1 固定在 PA4 上这是芯片引脚复用决定的。PA5LD1配置为 GPIO 推挽输出。作为周期指示信号与 DAC 输出是两路相互独立的信号。3. STM32CubeMX2 工程配置3.1 新建工程本实验采用 MCU 方式创建工程即以芯片型号 STM32C542RC 为起点而非开发板方式。进入 MCU 选择界面启动 STM32CubeMX2在首页点击 MCU进入芯片型号选择列表。搜索并选中芯片在 MCU name 输入框中输入 STM32C542RC或完整型号 STM32C542RCT6从筛选出的列表中选择对应型号。填写项目信息输入项目名称 DAC_Output 和项目保存路径。项目名称避免使用特殊字符路径建议使用纯英文目录。3.2 基础配置工程创建后软件自动进入 Pinout 视图。时钟配置本工程系统时钟为48 MHzHSI ÷ 3DAC 内核时钟为144 MHzPSIS 时钟预分频系数为 1。3.3 GPIO 配置PA5 输出在 Pinout 视图中找到PA5引脚。右键点击 PA5选择Assign signal→GPIO。再次右键点击 PA5选择Configure GPIO进入 GPIO 详细配置界面。将 PA5 的Mode设置为Output。保持默认参数Output level 为 LowOutput mode 为 Push PullPull-up/Pull-down 为 No pull-up and no pull-downMaximum output speed 为 Low。在User Label输入框中填入LD1。设置别名后CubeMX2 会自动生成宏定义LD1_PORT和LD1_PIN。3.4 DAC1 配置1启用 DAC1在左侧外设列表中找到Analog→DAC1点击展开。将Channel 1设置为Connected to external pin only仅连接到外部引脚。设置完成后Pinout 视图中PA4自动分配为DAC1_OUT1模拟模式。2配置 DAC 参数在 DAC1 的Parameter Settings中设置参数值说明Output BufferEnable输出缓冲开启带负载能力更强TriggerNone无触发软件触发Data Alignment12 bits right12 位右对齐Output ConnectionExternal输出连接到外部引脚High Frequency ModeAuto高频模式自动选择3确认引脚配置回到 Pinout 视图PA4 应显示为DAC1_OUT1模拟模式。3.5 项目配置点击Project Settings进入工程设置页面。在IDE Format下拉选项中选择CMake。在CMake Toolchain下拉选项中选择GCC。确认配置无误后点击Generate Code。CubeMX2 会执行配置检查如果没有错误开始在指定路径下生成 CMake 工程文件。生成完成后项目路径下会出现标准 CMake 工程结构包含Core/、Drivers/、CMakeLists.txt等。4. 编程实现4.1 实现思路采用“DAC 无触发启动 主循环更新转换值 PA5 同步翻转”的方案mx_system_init() // CubeMX2 生成时钟、GPIO(PA4/PA5)、DAC1 初始化 │ ▼ mx_dac1_gethandle() // 获取 DAC1 句柄 │ ▼ HAL_DAC_SetChannelData() // 先写数据到 DHR无触发模式要求 │ ▼ HAL_DAC_StartChannel() // 再使能通道开始转换 │ ▼ 主循环周期性地写入递增的转换值形成锯齿波 │ ├─ dac_value DAC_STEP_VALUE │ └─ dac_value DAC_MAX_VALUE? ├─ 是 → 回绕到最小值翻转 PA5 └─ 否 → 继续 │ ▼ HAL_Delay(2) // 步进延时决定锯齿波周期无触发的启动时序HAL_DAC_TRIGGER_NONE模式下应先HAL_DAC_SetChannelData()写入初始值到 DHR再HAL_DAC_StartChannel()使能通道。顺序不可颠倒。写入立即生效无触发模式下HAL_DAC_SetChannelData()写入 DHR 后输出电压立即更新无需等待任何触发事件。这正是能在主循环中“写一次、更新一次”生成锯齿波的原理。各步骤使用的 HAL 函数步骤HAL 函数作用获取 DAC1 句柄mx_dac1_gethandle()返回 CubeMX 生成的 DAC1 句柄写入转换值HAL_DAC_SetChannelData()写入 DHR无触发时立即生效启动通道HAL_DAC_StartChannel()使能 DAC 通道 1翻转 PA5HAL_GPIO_TogglePin(LD1_PORT, LD1_PIN)切换 PA5 输出电平4.2 关键代码在 VS Code 中打开生成的 CMake 工程找到Core/Src/main.c添加以下代码。1文件头部添加宏定义与变量/* Private define ------------------------------------------------------------*//* DAC1 channel 1 (12-bit, right-aligned) output value range */#defineDAC_MIN_VALUE0U#defineDAC_MAX_VALUE4095U#defineDAC_STEP_VALUE128U/* step per update - sawtooth resolution *//* Private variables ---------------------------------------------------------*/statichal_dac_handle_t*hDAC1_handleNULL;2主函数intmain(void){if(mx_system_init()!SYSTEM_OK){return(-1);}/* Get the DAC1 handle initialized by mx_dac1_init() */hDAC1_handlemx_dac1_gethandle();if(hDAC1_handleNULL){return(-1);}/* Software (no hardware) trigger: set the initial value into DHR first, then enable the channel to start conversion. */if(HAL_DAC_SetChannelData(hDAC1_handle,HAL_DAC_CHANNEL_1,DAC_MIN_VALUE)!HAL_OK){return(-1);}if(HAL_DAC_StartChannel(hDAC1_handle,HAL_DAC_CHANNEL_1)!HAL_OK){return(-1);}/* Sawtooth generation: periodically update the DAC conversion value. PA5 (LD1) toggles at each period boundary to indicate the output period. */uint32_tdac_valueDAC_MIN_VALUE;while(1){/* Update the DAC data holding register - immediate output update */(void)HAL_DAC_SetChannelData(hDAC1_handle,HAL_DAC_CHANNEL_1,dac_value);/* Next step of the rising ramp */dac_valueDAC_STEP_VALUE;if(dac_valueDAC_MAX_VALUE){/* End of the sawtooth period: wrap to the minimum value */dac_valueDAC_MIN_VALUE;/* Toggle PA5 to mark one full output period */HAL_GPIO_TogglePin(LD1_PORT,LD1_PIN);}/* Delay between two updates defines the sawtooth step period */HAL_Delay(2U);}}代码说明mx_dac1_gethandle() 返回 CubeMX2 生成的 DAC1 句柄返回 NULL 时需处理。HAL_DAC_SetChannelData() 写入 DAC 数据保持寄存器DHR无触发模式下写入后立即生效。HAL_DAC_StartChannel() 使能 DAC 通道 1必须在 HAL_DAC_SetChannelData() 之后调用。主循环中写入 dac_value 后立即递增形成锯齿波的上升沿。当 dac_value 超过 DAC_MAX_VALUE 时回绕到 DAC_MIN_VALUE形成锯齿波的回绕跳变。每次回绕时翻转 PA5LD1输出与锯齿波周期同步的方波。5. 编译烧录与运行测试5.1 编译与烧录打开工程用 VS Code 打开 CubeMX2 生成的 CMake 工程文件夹如 DAC_Output_cmake。编译点击 VS Code 底部状态栏的Build按钮或使用命令面板执行 CMake 构建。编译完成后终端应输出退出代码为 0无报错提示。连接开发板用支持数据传输的 USB Type-C 线连接 NUCLEO-C542RC 的 ST-LINK USB 口CN1。确认设备识别打开设备管理器在“端口 (COM 和 LPT)”下应能看到STLink COMx。烧录点击 VS Code 中的运行按钮将固件下载到开发板。5.2 运行与测试烧录完成后点击 VS Code 中的 Run 按钮程序开始运行。使用双通道示波器观测 PA4 和 PA5 的波形。测试方法用示波器验证波形与同步关系双通道示波器CH1 接 PA4CH2 接 PA5共地3.3 V 量程。观察 CH1应观察到阶梯式上升后跳变回落的锯齿波。观察 CH2应观察到方波。验证同步以 PA5 的上升/下降沿为触发观察 PA4 —— 每次 PA5 翻转的时刻恰好对应 PA4 锯齿波达到最大值后回落的时刻。测试结果☑ 编译通过无错误☑ 烧录成功☑ PA4 输出锯齿波☑ PA5 输出方波占空比 50%☑ PA5 在 PA4 达到最大值时翻转与锯齿波周期边界完全同步功能正常。6. 小结本实验通过 DAC1 通道 1 经 PA4 输出模拟电压实现了周期性更新转换值生成锯齿波并通过 PA5 输出与锯齿波同步的方波掌握了 STM32C5 系列 DAC 的配置与使用方法。核心逻辑可以概括为“DAC 无触发启动 → 主循环更新转换值 → 生成锯齿波 → PA5 同步翻转”。版权声明欢迎关注 youcansxidian【嵌入式软件AI编程】专栏转发必须注明原文链接【STM32C5教程】9DAC 模拟量信号输出实验Copyright by ai4mcuqq.com 2026Crated2026-10

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号