0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第十五章 DAC (下篇)

W55MH32 来源:W55MH32 作者:W55MH32 2025-05-28 15:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单芯片解决方案,开启全新体验——W55MH32 高性能以太网单片机

W55MH32是WIZnet重磅推出的高性能以太网单片机,它为用户带来前所未有的集成化体验。这颗芯片将强大的组件集于一身,具体来说,一颗W55MH32内置高性能Arm® Cortex-M3核心,其主频最高可达216MHz;配备1024KB FLASH与96KB SRAM,满足存储与数据处理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP协议栈、内置MAC以及PHY,拥有独立的32KB以太网收发缓存,可供8个独立硬件socket使用。如此配置,真正实现了All-in-One解决方案,为开发者提供极大便利。

在封装规格上,W55MH32 提供了两种选择:QFN68和QFN100。

W55MH32Q采用QFN68封装版本,尺寸为8x8mm,它拥有36个GPIO、3个ADC、12通道DMA、17个定时器、2个I2C、3个串口、2个SPI接口(其中1个带I2S接口复用)、1个CAN以及1个USB2.0。在保持与同系列其他版本一致的核心性能基础上,仅减少了部分GPIO以及SDIO接口,其他参数保持一致,性价比优势显著,尤其适合网关模组等对空间布局要求较高的场景。紧凑的尺寸和精简化外设配置,使其能够在有限空间内实现高效的网络连接与数据交互,成为物联网网关、边缘计算节点等紧凑型设备的理想选择。 同系列还有QFN100封装的W55MH32L版本,该版本拥有更丰富的外设资源,适用于需要多接口扩展的复杂工控场景,软件使用方法一致。更多信息和资料请进入http://www.w5500.com/网站或者私信获取。

此外,本W55MH32支持硬件加密算法单元,WIZnet还推出TOE+SSL应用,涵盖TCP SSL、HTTP SSL以及MQTT SSL等,为网络通信安全再添保障。

为助力开发者快速上手与深入开发,基于W55MH32Q这颗芯片,WIZnet精心打造了配套开发板。开发板集成WIZ-Link芯片,借助一根USB C口数据线,就能轻松实现调试、下载以及串口打印日志等功能。开发板将所有外设全部引出,拓展功能也大幅提升,便于开发者全面评估芯片性能。

若您想获取芯片和开发板的更多详细信息,包括产品特性、技术参数以及价格等,欢迎访问官方网页:http://www.w5500.com/,我们期待与您共同探索W55MH32的无限可能。

wKgZO2gbOfaAVPzkACJSygzv-rI600.png

第十五章 DAC (下篇)

1 程序设计

1.1 DAC_OutDMASineWave例程

此例程的主要功能是借助 W55MH32 的 DAC(数模转换器)输出软件正弦波,并且通过串口输出系统时钟信息。下面是其主要工作流程:

1.初始化配置

⚪使能系统时钟,配置串口(波特率 115200)输出调试信息。

⚪初始化 GPIO、DAC(通道 1/2)、定时器 TIM2(周期 为20个时钟周期)及 DMA(循环模式)。

2.正弦波生成

void DMA_Configuration(void)
{
    DMA_InitTypeDef DMA_InitStructure;
    // 使能DMA2时钟
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

    // 配置DMA通道4(DAC2)
    DMA_InitStructure.DMA_PeripheralBaseAddr = DAC2_DHR12RD_ADDRESS; // DAC2寄存器地址
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&DualSine12bit; // 数据源:双通道数据数组
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; // 内存到外设
    DMA_InitStructure.DMA_BufferSize = POINT_NUM; // 传输32点
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; // 循环模式,持续输出
    DMA_Init(DMA2_Channel4, &DMA_InitStructure);
    DMA_Cmd(DMA2_Channel4, ENABLE);

    // 配置DMA通道3(DAC1,参数与通道4相同)
    DMA_InitStructure.DMA_PeripheralBaseAddr = DAC1_DHR12RD_ADDRESS;
    DMA_Init(DMA2_Channel3, &DMA_InitStructure);
    DMA_Cmd(DMA2_Channel3, ENABLE);
}

⚪通过 12 位正弦波数据数组Sine12bit(32 点),生成双通道 DAC 数据DualSine12bit。

3.工作流程

⚪TIM2 以设定周期触发 DMA,将正弦波数据循环传输至 DAC,驱动模拟输出。

⚪主循环保持运行,实现连续波形输出。

4.调试功能

⚪串口输出系统各时钟频率,便于调试。

1.2 DAC_OutNoiseWave例程

这个例程的主要作用是利用 W55MH32 的 DAC(数模转换器)输出噪声波信号,同时通过串口输出系统时钟信息以方便调试。以下是具体作用的详细阐述:

1. 系统初始化与信息输出

⚪时钟与延时初始化:开启 CRC 时钟,进行延时初始化,为后续操作提供时钟基础。

⚪串口通信配置:将串口波特率设置为 115200,对 GPIO 和 USART 进行初始化,实现串口通信功能。

⚪时钟信息输出:获取系统时钟频率,把系统时钟、HCLK、PCLK1、PCLK2 和 ADCCLK 的频率信息通过串口输出,方便开发人员了解系统时钟状态。

2.噪声波信号输出

 // GPIO配置函数(DAC输出引脚)
void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    // 使能GPIOA时钟(DAC通道1/2对应PA4/PA5)
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    // 配置PA4和PA5为模拟输入模式(内部连接DAC输出)
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_4 | GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AIN; // 模拟输入模式(无需上拉/下拉)
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

// DAC配置函数(噪声波模式)
void DAC_Configuration(void)
{
    DAC_InitTypeDef DAC_InitStructure;

    // 使能DAC时钟(APB1总线)
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

    // 配置DAC通道1和2为噪声波模式
    DAC_InitStructure.DAC_Trigger                      = DAC_Trigger_Software; // 软件触发(非自动触发)
    DAC_InitStructure.DAC_WaveGeneration               = DAC_WaveGeneration_Noise; // 启用噪声波生成
    DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_4095; // 噪声波幅度(全范围)
    DAC_InitStructure.DAC_OutputBuffer                 = DAC_OutputBuffer_Enable; // 使能输出缓冲(提高驱动能力)

    // 初始化DAC通道1和2
    DAC_Init(DAC_Channel_1, &DAC_InitStructure);
    DAC_Init(DAC_Channel_2, &DAC_InitStructure);

    // 使能DAC通道
    DAC_Cmd(DAC_Channel_1, ENABLE);
    DAC_Cmd(DAC_Channel_2, ENABLE);

    // 设置初始输出数据(12位左对齐,值为0x7FF0,即32784/4096=8.0V?需根据参考电压调整)
    DAC_SetChannel1Data(DAC_Align_12b_L, 0x7FF0); // 通道1初始值
    DAC_SetChannel2Data(DAC_Align_12b_L, 0x7FF0); // 通道2初始值
}

 

⚪GPIO 配置:使能 GPIOA 时钟,把 PA4 和 PA5 引脚配置成模拟输入模式,作为 DAC 的输出引脚。

⚪DAC 配置:使能 DAC 时钟,将 DAC 通道 1 和通道 2 配置成软件触发模式,并且设置为噪声波生成模式。同时,开启输出缓冲,把初始数据设置为 0x7FF0。

⚪噪声波输出:在主循环里,持续对 DAC 通道 1 和通道 2 进行软件触发,从而让 PA4 和 PA5 引脚持续输出模拟的噪声波信号。

3. 输出重定向

⚪实现SER_PutChar和fputc函数,把printf函数的输出重定向到串口,方便开发人员通过串口输出调试信息。

综上所述,该例程可用于测试和验证 W55MH32 的 DAC 模块输出噪声波的功能,也可作为开发基于 DAC 输出噪声波应用的基础代码。

1.3 DAC_OutTriangleWave例程

该例程通过初始化系统时钟、串口、GPIO和DAC,利用软件触发DAC生成并输出双通道三角波信号,同时将系统时钟信息通过串口输出,用于验证DAC功能和作为信号源开发基础。以下是具体作用的详细阐述:

1.初始化配置

⚪使能系统时钟并配置串口(波特率 115200)输出系统时钟频率(SYSCLK/HCLK/PCLK1/PCLK2/ADCCLK)。

⚪初始化 GPIOA 的 PA4/PA5 为模拟输入模式,作为 DAC 输出引脚。

2.三角波生成配置

// DAC配置函数:启用硬件三角波生成
void DAC_Configuration(void)
{
    DAC_InitTypeDef DAC_InitStructure;
    // 使能DAC时钟(APB1总线)
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
    
    // 配置DAC为软件触发模式,启用三角波生成
    DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software; // 软件触发(需手动调用触发函数)
    DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Triangle; // 三角波模式
    DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_2047; // 幅度设置为2047(半满量程,12位)
    DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; // 使能输出缓冲(增强驱动能力)
    
    // 初始化DAC通道1和2
    DAC_Init(DAC_Channel_1, &DAC_InitStructure);
    DAC_Init(DAC_Channel_2, &DAC_InitStructure);
    
    // 使能DAC通道
    DAC_Cmd(DAC_Channel_1, ENABLE);
    DAC_Cmd(DAC_Channel_2, ENABLE);
    
    // 设置初始数据为0(三角波起点)
    DAC_SetChannel1Data(DAC_Align_12b_L, 0); // 12位左对齐,值为0
    DAC_SetChannel2Data(DAC_Align_12b_L, 0);
}

⚪DAC 配置为软件触发模式,启用硬件三角波生成功能。

⚪设置三角波幅度为 2047(12 位半满量程,对应约 1.65V 峰峰值),输出缓冲使能。

⚪初始通道数据设为 0,作为波形起点。

3.工作流程

int main(void)
{
    // ...(初始化代码略)...
    
    printf("DAC Out Triangle Wave Test.n"); // 打印测试提示
    
    while (1)
    {
        // 软件触发DAC通道1和2转换(生成三角波)
        DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
        DAC_SoftwareTriggerCmd(DAC_Channel_2, ENABLE);
        
        // 循环触发,频率由主循环速度决定(需结合延时调整,当前为无延时快速触发)
    }
}

⚪主循环无限触发 DAC 软件转换,PA4/PA5 引脚输出连续三角波信号(0→2047→0 循环)。

⚪三角波频率由软件触发速率决定,需通过示波器观察波形。

4.调试功能

⚪串口输出系统时钟信息,便于验证硬件配置。

2 下载验证

1.1 DAC_OutDMASineWave例程

程序运行后,首先会通过串口输出系统时钟相关频率信息,告知用户SYSCLK、HCLK、PCLK1、PCLK2和ADCCLK的频率,同时提示“DAC Out Software Sine Wave Test.”信息:

wKgZPGg2uY2AGfApAAByEj1jhyI665.png

接着,GPIO、DAC、定时器和DMA完成配置,定时器TIM2按照设定的周期触发,借助DMA将正弦波数据循环传输到DAC通道1和通道2,使PA4和PA5引脚持续输出模拟的正弦波信号,之后程序进入无限循环以维持正弦波的稳定输出:

wKgZPGg2uYiAL8B3AAC3EVCdbM8239.png

1.2 DAC_OutNoiseWave例程

程序运行后,首先通过串口输出系统各时钟频率信息(如SYSCLK、HCLK等),并提示“DAC Out Noise Wave Test.”:

wKgZPGg2uYiAdgu5AABvhHBXtf4279.png

随后,PA4和PA5引脚持续输出由DAC内部LFSR生成的12位随机噪声波信号,电压值在0-3.3V范围内无规律波动。主循环通过软件触发DAC连续转换,保持波形输出,需通过示波器观察模拟信号变化:

1.3 DAC_OutTriangleWave例程

程序运行后,首先通过串口输出系统时钟频率信息,包SYSCLK、HCLK、PCLK1、PCLK2和ADCCLK的频率,同时提示进行DAC输出三角波测试:

wKgZO2g2uYiAIlBNAABq_mdlROg668.png

之后,GPIO和DAC完成配置,主循环中持续对DAC通道1和通道2进行软件触发,使得PA4和PA5引脚持续输出模拟三角波信号,该信号幅度为2047(对应12位),并以初始值0为起点进行周期性的上升和下降变化,可使用示波器观察到该连续稳定的三角波波形:

wKgZO2g2uYiAXETWAACzxvRRJ44191.png

WIZnet 是一家无晶圆厂半导体公司,成立于 1998 年。产品包括互联网处理器 iMCU™,它采用 TOE(TCP/IP 卸载引擎)技术,基于独特的专利全硬连线 TCP/IP。iMCU™ 面向各种应用中的嵌入式互联网设备。

WIZnet 在全球拥有 70 多家分销商,在香港、韩国、美国设有办事处,提供技术支持和产品营销。

香港办事处管理的区域包括:澳大利亚、印度、土耳其、亚洲(韩国和日本除外)。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45340

    浏览量

    663582
  • 物联网
    +关注

    关注

    2939

    文章

    47322

    浏览量

    407896
  • dac
    dac
    +关注

    关注

    44

    文章

    2688

    浏览量

    196405
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    第十五章 DMA

    本章介绍DMA(直接存储器存取),其可在不占用CPU的情况下搬数据,支持多种传输方向,含控制器、通道等配置及相关实验代码。
    的头像 发表于 06-14 16:32 1112次阅读
    <b class='flag-5'>第十五章</b> DMA

    第十五章 DAC (上篇)

    文章介绍了基于W55MH32的DAC(数字/模拟转换器)上篇内容,其为12位转换器,有2通道,支持8/12位模式、DMA等,具噪声和三角波生成等功能,还介绍了DAC_OutAudio例程的配置与验证。
    的头像 发表于 05-28 15:07 1109次阅读
    <b class='flag-5'>第十五章</b> <b class='flag-5'>DAC</b> (上篇)

    《DNK210使用指南 -CanMV版 V1.0》第十五章 按键中断实验

    第十五章 按键中断实验 本章实验将介绍如何使用CanMV让Kendryte K210通过中断的方式获取板载按键的状态。通过本章的学习,读者将学习到在CanMV下Kendryte K210的GPIO
    发表于 10-12 09:20

    至芯科技之altera 系列FPGA教程 第十五篇 安装驱动

    至芯科技之altera 系列FPGA教程 第十五篇 安装驱动
    发表于 08-11 03:34

    视频详解:上海尤老师verilog入门到实战第十五

    本帖最后由 春哥哥 于 2016-10-10 17:48 编辑 上海尤老师verilog入门到实战第十五课——无线通信中的升采样过程中的频谱搬迁过程;百度云网盘链接后缀:/s/1i5kCpXb,加群讨论252520964,307510678
    发表于 10-10 10:42

    基于RFID和MySQL实现小区门禁系统

    第十五章 用RFID+MySQL实现小区门禁系统(RFID522+ESP8266-12N+1602LCD)(Arduino边做边学:从点亮Led到物联网)
    发表于 06-24 08:26

    「正点原子Linux连载」第十五章按键输入试验

    1)实验平台:正点原子Linux开发板2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南》关注官方微信号公众号,获取更多资料:正点原子第十五章按键输入试验 前面几章试验都是讲解
    发表于 12-21 12:11

    第十五届智能车入门浅谈 精选资料分享

    @TOC第十五届智能车入门浅谈写博客原因这次第十五届全国智能车大赛已经结束了,对于我而言,确实是我大学中一个不可多得的经历,我希望我的这段经历可以保存下来通过博客的形式,同时可以对于其他人有帮助
    发表于 07-28 06:02

    第十五讲 组合逻辑电路的分析方法和设计方法

    第十五讲 组合逻辑电路的分析方法和设计方法 6.1概述组合逻辑电路:定义构成电路特点6.2.1组合逻辑电路的分析方法
    发表于 03-30 16:21 5081次阅读
    <b class='flag-5'>第十五</b>讲 组合逻辑电路的分析方法和设计方法

    模拟电路网络课件 第十五节:单级放大电路的瞬态响应

    模拟电路网络课件 第十五节:单级放大电路的瞬态响应 3.8 单级放大电路的瞬态响应
    发表于 09-17 10:18 994次阅读
    模拟电路网络课件 <b class='flag-5'>第十五</b>节:单级放大电路的瞬态响应

    第十五届全国大学生机器人大赛ROBOCON比赛规则

    第十五届全国大学生机器人大赛ROBOCON比赛规则,参加机器人的看看
    发表于 06-08 15:30 0次下载

    第十五届智能车入门浅谈

    @TOC第十五届智能车入门浅谈写博客原因这次第十五届全国智能车大赛已经结束了,对于我而言,确实是我大学中一个不可多得的经历,我希望我的这段经历可以保存下来通过博客的形式,同时可以对于其他人有帮助
    发表于 11-26 12:36 16次下载
    <b class='flag-5'>第十五</b>届智能车入门浅谈

    【正点原子FPGA连载】第十五章 窗口门狗(WWDG)实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    【正点原子FPGA连载】第十五章 窗口门狗(WWDG)实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
    发表于 12-05 11:21 12次下载
    【正点原子FPGA连载】<b class='flag-5'>第十五章</b> 窗口门狗(WWDG)实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    深度参与,共话未来 —— 吹田电气亮相第十五届亚洲电源技术发展论坛

    在这个金秋时节,吹田电气带着对电源技术的无限热爱与追求,我们启程前往第十五届亚洲电源技术发展论坛的盛会。在这场汇聚了行业精英、学者与前沿技术的盛会中,我们不仅仅见证了电源技术的最新进展,更与众多同行
    的头像 发表于 12-09 16:58 1046次阅读
    深度参与,共话未来 —— 吹田电气亮相<b class='flag-5'>第十五</b>届亚洲电源技术发展论坛

    锐驰智光亮相第十五届交博会

    2025年4月23日,第十五届中国国际道路交通安全博览会(以下简称“交博会”)在武汉国际博览中心盛大启幕。
    的头像 发表于 04-24 17:12 809次阅读