发新帖我要提问
12
返回列表
打印
[STM32F1]

DAC(数模转换模块)-STM32F103

[复制链接]
楼主: 哈根达斯uz
手机看帖
扫描二维码
随时随地手机跟帖
21
哈根达斯uz|  楼主 | 2022-1-29 11:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
哈根达斯uz|  楼主 | 2022-1-29 11:40 | 只看该作者
寄存器版本代码-定时器计时
//DAC通道1输出初始化
void Dac1_Init(void)
{
        RCC->APB2ENR|=1<<2;    //使能PORTA时钟
        RCC->APB1ENR|=1<<29;   //使能DAC时钟        
                    
        GPIOA->CRL&=0XFFF0FFFF;
        GPIOA->CRL|=0X00000000;//PA4 模拟输入   

        DAC->CR|=1<<0;        //使能DAC1
        DAC->CR|=1<<1;        //DAC1输出缓存不使能 BOFF1=1
        DAC->CR|=1<<2;        //使用出发功能TEN1=1
        DAC->CR|=1<<5;        //DAC TIM2 TRGO,不过要TEN1=1
        DAC->CR|=0<<6;        //不使用波形发生器
        DAC->CR|=0<<8;        //屏蔽幅值设置
        DAC->CR|=1<<12;        //DAC1 DMA使能   因为我用到DMA搬运数据

        DAC->DHR12R1=0;
}
//定时器初始化
void TIM2_DAC1_Init(u16 arr,u16 psc)
{
       
        RCC->APB1ENR|=1<<0;        //TIM2时钟使能
        TIM2->ARR=arr;          //自动重装载值
        TIM2->PSC=psc;          //预分频系数          
        TIM2->CR2|=2<<4;      //选择更新事件作为触发输出
        TIM2->CR1|=0x01;    //使能定时器2
       
}

//改变频率,重新计时
void TIM2_DAC_REINIT(u16 hz)//¸改变频率
{       
        u16 arr;
        arr = 72000000/(hz * 256); // 通过hz改变重装载值
        TIM2->CR1|=0x00;    //关闭定时器2
        TIM2->ARR=arr;          //自动重装载值
        TIM2->CR1|=0x01;    //使能定时器2
}

使用特权

评论回复
23
哈根达斯uz|  楼主 | 2022-1-29 11:41 | 只看该作者
定时器根据频率计算重装载值

使用特权

评论回复
24
哈根达斯uz|  楼主 | 2022-1-29 15:22 | 只看该作者

使用特权

评论回复
25
哈根达斯uz|  楼主 | 2022-1-29 15:22 | 只看该作者
在实际应用中,可以根据工程里的正弦波点数和定时器配置生成特定频率的正弦波。这里我用的是256点产生数据。

使用特权

评论回复
26
哈根达斯uz|  楼主 | 2022-1-29 15:28 | 只看该作者
现象



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则