stm32cubemx(08)定时器+dac+dma输出正弦波实验。(代码片段)

学工科的皮皮志^_^ 学工科的皮皮志^_^     2023-01-07     547

关键词:


前言

我们前面讲了输出了阶梯波实验
STM32CubeMX(07)定时器+ DAC+DMA输出阶梯波实验。
今天我们来输出正弦波,其实我们很容易发现其中的规律,就是输出相应的AD值就可以了。

一、练习

【功能】定时器触发DAC转换,使用DMA方式触发 ,在DAC通道1输出正弦波。

【参数计算&设置】 定时器6定时参数(APB1总线,84MHz):20.5KHz
== PSC=15, ARR=255,== 则定时器更新周期为 84MHz/(16*256)=20.5KHz 若正弦波每个周期32个采样点,则每个正弦波周期为 :20.5KHz/32=640Hz

二、思路

首先在数学上我们要理清楚
V=sin(t),t属于[0:2π],sin(t)的范围是[-1:1],因为DA不能输出所以我们要抬升V=sin(t)+1,范围是[0:2],
写到寄存器的值的范围是[0:4096],所以2048*(sin(t)+1)的范围就是[0:4096]
需要多少个点只需要把2π分成多少份就可以了
所以转化成C语言就是
== 2048*(sin((2.0PIi)/(Point_Num-1))+1)==

然后封装成一个函数就是
void SineWave_Data( uint16_t cycle ,uint16_t D)

uint16_t i;
for( i=0;i<cycle;i++)

D[i]=2048
(sin((2.0PIi)/(Point_Num-1))+1);

三、参数修改

我们在tim.c的基础上修改一下就可以了,改一下分频系数和装载值。

然后在main.c中添加如下变量和函数

然后在main函数中初始化好,就可以了,编译,烧录

四、测试结果

可以看到我们的频率时符合我们的理论值,那为啥看起来这么离散,原因是点数太少了,一个正弦波用32个点来表示,其实已经很勉强了。

总结

那么方波,三角波,甚至是任意波,都是一样的道理。我这里就不着重讲了,只要推出数学表达式就可以了,今天的总结到此结束,希望能够帮助到大家。

void SineWave_Data( uint16_t cycle ,uint16_t *D) //正弦波

    u16 i;
    for( i=0;i<cycle;i++)
    
        D[i]=2048*(sin((2.0*PI*i)/(Point_Num-1))+1);
    

void Triangle_Data(uint16_t cycle ,uint16_t *D) //三角波

    u16 i;
    for( i=0;i<cycle;i++)
    
			if(i<=cycle/2)
			
        D[i]=i*(4096.0/(cycle/2));
			
			else
			  D[i]=i*(-4096.0/(cycle/2))+2*4096;	
       

void Square_Data(uint16_t cycle ,uint16_t *D) //方波

 u16 i;
    for( i=0;i<cycle;i++)
    
			if(i<=cycle/2)
			
        D[i]=0;
			
			else
			  D[i]=4095;	
            

stm32cubemx教程dac+tim+dma(代码片段)

DAC+TIM+DMA前言本文主要讲解定时器触发DAC去输出任意信号,DMA负责数据数据搬移。所需工具:开发板:STM32F103RCT6STM32CubeMXIDE:Keil-MDK相关文章:文章目录DAC+TIM+DMA前言什么是DAC模式简介工程建立时钟配置DAC配置... 查看详情

stm32f103vet6基于stm32cubemx配置dac-三角波输出示例(代码片段)

STM32F103VET6基于STM32CubeMX配置DAC-三角波输出示例📽🎞🎬STM32CubeMX配置过程演示📍DAC输出引脚位:PA4🌷不同分频系数下的三角波频率分频系数越高,频率越低。htim2.Init.Prescaler=6-1;htim2.Init.Prescale 查看详情

stm32f4hal库cubemx(十五)--------dac实验(代码片段)

文章目录前言一、DAC是什么?二、DAC实验1.实验所需配置功能2.功能配置3.时钟配置4.生成代码前言STM32F4的DAC模块(数字/模拟转换模块)是12位数字输入,电压输出型的DAC。DAC可以配置为8位或12位模式,也可以与DMA控制器... 查看详情

stm32g070rbt6基于stm32cubemx配置定时器pwm功能案例(代码片段)

STM32G070RBT6基于STM32CubeMX配置定时器PWM功能案例📺STM32CubeMX配置过程演示🛠根据定时时间的计算公式设置PWM频率📝定时时间为1ms,可设置Prescaler=64-1;Counter=1000-1;(TIM1时钟频率设置为64MHzÿ 查看详情

STM32 TIM DAC 和 DMA

...:我想通过使用DMA功能来卸载我的STM32G491的CPU。我想使用定时器2(TIM2)生成需要DMA传输的四个时刻。这样做时,我可以在一个周期内创建两个脉冲。使用定时器输出比较功能可以调整周期、占空比和延迟。intamplitude=0xFFF;uint16_tcurre... 查看详情

stm32f103vet6基于stm32cubemx创建定时器中断控制led闪烁(代码片段)

STM32F103VET6基于STM32CubeMX创建定时器中断控制LED闪烁🌼STM32CubeMX配置界面演示⚡需求是通过定时器1来控制LED灯1s亮灭。📌工程分为两部分组成:STM32CubeMX创建并配置工程和业务代码完善🍁STM32CubeMX创建并配置工程1.&#... 查看详情

stm32cubemx工程定时器配置

STM32CubeMX生成工程选择自己的芯片型号                 配置RCC寄存器时钟为外部晶振单击芯片配置GPIO,选择输出方式,重命名标签等进入时钟配置,本人使用的为8M外部晶... 查看详情

小蜜蜂老师主讲基于stm32cubemx的嵌入式开发基础教程

...础教案资源链接,视频教程链接。【第05单元】:STM32的定时器开发基础教案资源链接,视频教程链接。【第06单元】:STM32的串口数据收发基础教案资源链接,视频教程链接。【第07单元】:STM32的定时器与串口综合训练教案资源... 查看详情

stm32cubemx开发05——定时器(代码片段)

这里面定时器的原理我就不多说了,在我以前的文章中间接的很清楚TIM定时器详解。本章主要讲解在CubeMx中如何配置定时器,如下图:一、main函数main.c/*USERCODEBEGINHeader*//*****************************************************************************... 查看详情

使用stm32cubemx生成stm32工程(代码片段)

...S的话,sys这里就不可以选取SysTick,要更换成其他定时器,这里我选用了TIM1,如果不跑操作系统那么也可以直接选择SysTick。在GPIO中选择自己使用的引脚 查看详情

stm32cubemx定时器中断(代码片段)

stm32cubemx定时器中断一、基础知识stm32f4:二、软件配置定时器时钟源:APB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。所支持速度不同:APB2支持高速状态... 查看详情

stm32cubemx定时器中断(代码片段)

stm32cubemx定时器中断一、基础知识stm32f4:二、软件配置定时器时钟源:APB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。所支持速度不同:APB2支持高速状态... 查看详情

stm32cubemx使用之通用定时器和系统定时器(代码片段)

目录一、概述二、Pinout&Configuration三、测试定时器四、系统定时器五、问题记录5.1定时器周期是设定的2倍一、概述本文记录下定时器的使用过程,主要是后续使用,能有个参考。遇到的定时器相关问题,也陆续记... 查看详情

stm32cubemx笔记--定时器生成pwm特定波形,控制舵机转动(代码片段)

定时器生成PWM特定波形,控制舵机转动1、舵机相关知识1.1相关舵机的知识点:1.2舵机的控制:2、STM32CubeMX引脚设置和代码生成2.1相关STM32CubeMX生成代码配置如下:3、编写相关的C函数文件3.1、相关PWM函数开启:... 查看详情

stm32h7教程第60章stm32h7的dac应用之定时器触发实现dma方式双通道波形(代码片段)

...tid=86980第60章      STM32H7的DAC应用之定时器触发实现DMA方式双通道波形本章节为大家讲解DAC采用定时器触发方式实现DMA双通道波形输出,实际输出效果也比较好,项目使用价值也比较大。60.1初学 查看详情

stm32cubemx(03)gpio口输出+定时器实验实现交通灯(代码片段)

文章目录前言一、GPIO口输出+定时器实验1、目的2、内容二、思路1.STM32CubeMX把IO口使能2.对相应引脚进行写操作3.使能溢出中断三、Keil编程3.1添加回调函数3.2编写用户函数3.3主函数调用总结前言前面我们学习了定时器,并且... 查看详情

stm32g070rbt6基于stm32cubemx创建定时器中断控制led闪烁(代码片段)

STM32G070RBT6基于STM32CubeMX创建定时器中断控制LED闪烁📍相关篇《【硬件开源电路】STM32G070RBT6开发板》🌺配置内容演示:📚功能介绍📑通过STM32CubeMX配置定时器1和定时器3分别作为两个led的定时闹钟。这里作为... 查看详情

stm32f103vet6基于stm32cubemx利用exti外部中断测量pwm频率(代码片段)

...断测量PWM频率📌相关篇《STM32G070RBT6基于STM32CubeMX配置定时器PWM功能案例》📍《STM32F103VET6基于STM32CubeMX创建EXTI外部中断工程》🌼本篇利用上面两篇示例综合,利用STM32F103VET6引脚PB1测量STM32 查看详情