1. 前言
- 数字/模拟转换模块(DAC),包含 2 个可配置 8/12 位数字输入转换 2 路模拟电压输出的转换器。
- 内置三角波、噪声波形发生器,支持多种事件触发转换,DMA 功能等。本次实验采用一路DAC间隔输出电压,然后打印输出模拟量值,熟悉STM32开发用易上手配置。✨✨✨
这是使用MounRiver Studio开发的项目,支持在RISC-V核心基础硬件CH32V307评估板上使用带有msh Shell的RTOS快速原型。
MCU:CH32V307VCT6,主频 144MHz,FLASH和RAM可配置
l 2 个 DAC 转换器,每个转换器对应 1 个输出通道
l 三角波、噪声波形发生器
l 可配置 8 位或 12 位输出
l 12 位数据左对齐或右对齐
l 双 DAC 同时或分别转换
l 支持 DMA 功能
l 多种触发事件
首先,应安装 CH32V307 评估板的驱动程序,打开设备管理器查看USB 端口和外部接口已准备就绪。
2. 软件配置
2.1 安装MounRiver Studio
环境搭建教程:https://blog.csdn.net/VOR234/article/details/128932474
3. DAC项目测试
3.1 打开DAC工程
评估板说明及参考例程:https://www.wch.cn/downloads/CH32V307EVT_ZIP.html
进入EXAM目录,就有对应的外设教程
进入DAC_Normal_OUT文件下,双击DAC_Normal_OUT.wvproj,
打开项目工程如下,main.c在user文件夹下
main.c,参考电压是3.3V
/
/********************************** (C) COPYRIGHT ******************************* * File Name : main.c * Author : WCH * Version : V1.0.0 * Date : 2021/06/06 * Description : Main program body. ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * Attention: This software (modified or not) and binary are used for * microcontroller manufactured by Nanjing Qinheng Microelectronics. *******************************************************************************/ /* *@Note normal output routine: DAC channel 0 (PA4) output Turn off the trigger function, and by writing to the data holding register, PA4 outputs the corresponding voltage. */ #include "debug.h" /* Global define */ #define Num 7 /* Global Variable */ u16 DAC_Value[Num] = {64, 128, 256, 512, 1024, 2048, 4095}; /********************************************************************* * @fn Dac_Init * * @brief Initializes DAC collection. * * @return none */ void Dac_Init(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; DAC_InitTypeDef DAC_InitType = {0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_4); DAC_InitType.DAC_Trigger = DAC_Trigger_None; DAC_InitType.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; DAC_InitType.DAC_OutputBuffer = DAC_OutputBuffer_Disable; DAC_Init(DAC_Channel_1, &DAC_InitType); DAC_Cmd(DAC_Channel_1, ENABLE); DAC_SetChannel1Data(DAC_Align_12b_R, 0); } /********************************************************************* * @fn main * * @brief Main program. * * @return none */ int main(void) { u8 i = 0; SystemCoreClockUpdate(); Delay_Init(); USART_Printf_Init(115200); Dac_Init(); printf("SystemClk:%d\r\n", SystemCoreClock); printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() ); printf("DAC Normal OUT\r\n"); while(1) { for(i = 0; i < Num; i++) { DAC_SetChannel1Data(DAC_Align_12b_R, DAC_Value[i]); printf( "DAC:%04x,OUTPUT:%d\r\n", DAC_Value[i],DAC_Value[i]*3300/4095 ); Delay_Ms(1000); } } }
3.2 编译项目
开发板数据线连接电脑就可以开始连接调试🛹🛹🛹,首先开始编译,编译成功如下
然后下载,下载成功如下
4. 下载验证
4.1 接线
根据程序设计调试,可以用电压表测量DAC channel 0 (PA4) output,在0~3.3V之间,即可输出DAC模拟值
4.2 演示效果
代码下载后验证,点击串口调试器,设置串口参数确认。
复位运行成功如下打印DAC模拟值变化,从51mv到3300mv,电压表可以正常读取(PA4) output,在0~3.3V之间。
SystemClk:96000000 ChipID:30700518 DAC Normal OUT DAC:0040,OUTPUT:51 DAC:0080,OUTPUT:103 DAC:0100,OUTPUT:206 DAC:0200,OUTPUT:412 DAC:0400,OUTPUT:825 DAC:0800,OUTPUT:1650 DAC:0fff,OUTPUT:3300
5. 小结
🥳🥳🥳通过对这篇文章我们掌握了沁恒WCH CH32V307V-R1开发板输出DAC模拟电压实验,尝试与Arduino通讯做更加好玩的实验,进而丰富我们的生活。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣