STM32 双DAC DMA TIM6输出正弦波例子

STM32F103有双DAC通道,利用DMA实现2个波形输出

#include "stm32f10x.h"

//DAC1,2初始化
void dac_init(void)
{
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; //开启端口A时钟
    RCC->APB1ENR |= RCC_APB1ENR_DACEN; //开启DAC时钟
    
    GPIOA->CRL &= 0xff00ffff; //PA4,PA5模拟输入
    
    DAC->CR = DAC_CR_TEN1 | DAC_CR_TEN2; //开启触发使能才能设置触发模式
    //开启DAC,关闭输出缓存,TIM6 TRGO触发,DMA使能
    DAC->CR |= DAC_CR_EN1 | DAC_CR_BOFF1 | DAC_CR_DMAEN1 | \
               DAC_CR_EN2 | DAC_CR_BOFF2 | DAC_CR_DMAEN2;
    //必须关闭缓冲才能输出低于0.5V电压
}

//DMA2初始化
void dma2_init(unsigned int cpar, unsigned int cmar, unsigned int cndtr)
{
    RCC->AHBENR |= RCC_AHBENR_DMA2EN; //开启DMA2时钟

    DMA2_Channel3->CPAR = cpar; //外设地址
    DMA2_Channel3->CMAR = cmar; //存储器地址
    DMA2_Channel3->CNDTR = cndtr; //传输数据量
    
    //通道开启,从存储器读,循环,外设不自增,存储器自增
    //外设32位数据,存储器32位数据,优先级最高,非存储器到存储器
    DMA2_Channel3->CCR = DMA_CCR3_EN | DMA_CCR3_DIR | DMA_CCR3_CIRC | \
                         DMA_CCR3_MINC | DMA_CCR3_PSIZE_1 | DMA_CCR3_MSIZE_1 | \
                         DMA_CCR3_PL_0 | DMA_CCR3_PL_1;
}

//TIM6初始化
void tim6_init(unsigned short arr, unsigned short psc)
{
    RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; //开启TIM6时钟
    
    TIM6->PSC = psc; //预分频器
    TIM6->ARR = arr; //自动重装载

    TIM6->CR2 &= 0xff8f;
    TIM6->CR2 |= TIM_CR2_MMS_1; //更新事件用作TRGO
    
    TIM6->CR1 &= 0xff70;
    TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE; //使能计数器,非单脉冲模式,自动重装载
}


初始化RCC时钟为72MHz,正弦波1000点,2个波形,一个反相,一个幅度改变

    for(i = 0; i < 1000; i++)
    {
        sw[i] = 4095 - sine_wave[i];
        sw[i] <<= 16;
        sw[i] += sine_wave[i] / 3;
    }
    
    dma2_init((unsigned int)&DAC->DHR12RD, (unsigned int)sw, 1000);
    dac_init();
    tim6_init(7200, 0);


ARR为7199,PSC为0,72M/7199/1000=10Hz波形频率,修改预分频和重装载数值可以改变波形频率

计算公式:f=fosc/n/(arr+1)/(psc+1)

f-波形频率

n-波形点数

arr-定时器计数,不能为0

psc-时钟分频系数

fosc-系统时钟,一般PLL后为72MHz


  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: STM32F103通道示波器是一种使用STM32F103微控制器构建的示波器设备。STM32F103是意法半导体(STMicroelectronics)推出的一款高性能ARM Cortex-M3内核的微控制器。 示波器是一种用于显示电压波形的仪器,能够对电路中的信号进行捕获、处理和显示。STM32F103通道示波器具有两个独立的通道,可以同时显示并测量两个信号。通过连接外部电路,可以将待测信号输入到示波器的通道中。 STM32F103微控制器具有较高的计算能力和处理速度,能够快速准确地采集和处理信号。它具有丰富的外设接口,可与外部传感器和设备进行通信和控制。示波器使用这些接口与外部电路连接,以读取待测信号,并将其转换为数字信号进行处理和显示。 通道示波器具有多种功能,如时间域和频谱分析、自动测量、幅度调节等。用户可以通过图形化界面进行操作和设置,方便快捷地获取所需的信号信息。 STM32F103通道示波器具有较小的体积和低功耗特性,适用于各种领域的电路调试和测量应用。它可以广泛应用于电子设计、教育实验、自动化控制等领域。 总之,STM32F103通道示波器是一种基于STM32F103微控制器的示波器设备,具有功能强大、易于操作和适用范围广的特点。 ### 回答2: STM32F103通道示波器是一种使用STM32F103微控制器制作的示波器,它具有通道输入功能。 首先,STM32F103是一款由意法半导体开发的高性能32位微控制器,它采用了ARM Cortex-M3内核,具有丰富的外设和强大的处理能力。由于其可靠性和广泛的应用领域,STM32F103成为了许多电子爱好者和工程师的首选微控制器之一。 对于通道示波器,它通常用于测量和显示电子信号的波形。使用STM32F103微控制器,我们可以实现一个通道示波器的功能。 该示波器的两个通道可以分别连接到待测信号的两个测量点,以获取两个信号的波形。通过使用STM32F103的ADC(模数转换器)外设,我们可以将模拟信号转换为数字信号,然后通过LCD屏幕或其他输出设备显示出来。 此外,在STM32F103微控制器上,我们可以通过使用GPIO(通用输入/输出)引脚来控制示波器的各种功能,如触发源、测量范围和采样率等。 另外,通道示波器还可以具备其他功能,如自动测量、光标测量和存储功能。通过使用STM32F103微控制器的存储器和编程功能,我们可以实现这些功能,并将测量结果保存在存储器中以供后续分析。 综上所述,STM32F103通道示波器是一种基于STM32F103微控制器制作的具有通道输入功能的示波器。通过充分利用STM32F103微控制器丰富的外设和强大的处理能力,我们可以实现测量、显示和存储电子信号波形的功能。这使得它成为电子爱好者和工程师进行电路调试和信号分析的重要工具。 ### 回答3: STM32F103通道示波器是一种基于STM32F103微控制器的示波器设计,它具有通道输入,可以用于观测和分析电子信号波形。 STM32F103微控制器是意法半导体(STMicroelectronics)推出的一款低功耗、高性能的32位单片机。它具有丰富的外设资源,可以满足复杂的控制和通信需求。它由ARM Cortex-M3内核驱动,具有高速指令执行和强大的计算能力。 在通道示波器设计中,STM32F103微控制器的两个通道被分别用于输入待测信号。这两个通道可以同时采集和显示不同的波形,从而可以方便地对信号进行比较和分析。示波器通常具有高速采样率和宽带宽,可以准确地捕捉和显示信号的细微变化。 通过使用STM32F103通道示波器,我们可以实时显示,观察和分析电子信号的波形。它可以帮助我们识别电路故障,测试信号品质,以及进行各种电子设备的调试和验证。另外,通道示波器还可以用于模拟信号的捕捉和分析,对于电子工程师和电子爱好者来说都是非常重要的工具。 需要注意的是,STM32F103通道示波器设计并不单纯依赖于硬件,软件的编写和算法的设计同样重要。为了实现高质量的波形显示和分析,需要编写相应的软件程序和算法,从而充分利用STM32F103微控制器的性能和特点。 总而言之,STM32F103通道示波器是一种基于STM32F103微控制器的设计,具有通道输入和高性能的特点。它是电子领域中常用的工具,可以实时显示和分析电子信号的波形,对于电子工程师和电子爱好者来说非常有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值