STM32实验-输出DAC正弦波

首先我们知道正弦波的解析式为y=Asin(omiga*x+fei)+b,拓展到STM32中则会得到如下的式子:

y=2048*sin((2*pi/samples)*x)+2048.

其中形参的取值范围是(samples/2)<maxval,采样的间隔是2*pi/samples。

接下来编写我们的函数代码dac_sin.c:

#include "./BSP/DAC/dac_sin.h"
#include "math.c"
 
DAC_HandleTypeDef g_dac_handle;
DMA_HandleTypeDef g_dma_handle;
uint16_t g_dac_sin_buf[4096];

void dac_dma_init(void){

    g_dma_handle.Instance = DMA2_Channel3;
    g_dma_handle.Init.Direction = DMA_MEMORY_TO_PERIPH;  //外设到内存
    g_dma_handle.Init.PeriphInc = DMA_PINC_DISABLE;  //因为选取的是DMA2的数据寄存器,选择不增量
    g_dma_handle.Init.MemInc = DMA_MINC_ENABLE;  //对于存储器需要存储多个数据,所以选择增量模式
    g_dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; //外设数据位宽,我们选择16位半字(全字可以理解为全角中文字符)
    g_dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;  //存储器数据位宽,我们也选择16位半字
    g_dma_handle.Init.Mode = DMA_CIRCULAR;   //选择循环模式
    g_dma_handle.Init.Priority = DMA_PRIORITY_MEDIUM;   //只有1个DMA随便选
    HAL_DMA_Init(&g_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值