学习笔记:STM32 按键控制DAC寄存器的范围

文章讲述了在学习DAC实验时,通过按键控制DAC寄存器的值,发现最大值限制在4095而非预期的4000。通过调整代码并处理溢出,作者成功实现了接近3.3V的最大电压输出。

问题:

在学习DAC数模转换实验时,例程中使用了如下代码实现按键控制DAC寄存器:

        if(key==WKUP_PRES)
        {         
            if(dacval<4000)dacval+=200;
            DAC_SetChannel1Data(DAC_Align_12b_R, dacval);
        }else if(key==2)    
        {
            if(dacval>200)dacval-=200;
            else dacval=0;
            DAC_SetChannel1Data(DAC_Align_12b_R, dacval);
        }     

功能很简单,按下按键后,对DAC寄存器中的数据进行加或减,可控制范围为0至4000,每次加或减200。

将按键加至设定的最大值4000后,如图,问题来了,功能倒是正常实现,但最大电压(DA转换后再使用AD转换并在LCD上显示)达不到3.3V。

提起4000,很难不联想到4096吧。细读了一遍函数 DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data),发现它的两个参数分别表示对齐方式与存入寄存器中的数据。例程中为12位右对齐,2^12=4096,能存入的数据最大值果然与此有关。于是将例程中的4000改为4096(此时代码无法正常实现功能,仅用于验证),再次按键至最大值:

OK,产生溢出了,溢出的数据正正好好,也就是说最多可以往寄存器中存入4095。

加一行代码 if(dacval>=4000)dacval=4095; 

成功达到(接近)3.3V。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值