第十五章 DAC (下篇)

描述

单芯片解决方案,开启全新体验——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的无限可能。

dac

第十五章 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.”信息:

dac

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

dac

1.2 DAC_OutNoiseWave例程

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

dac

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

1.3 DAC_OutTriangleWave例程

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

dac

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

dac

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

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

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

审核编辑 黄宇

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分