使用 DAC模块的通道 1 来输出模拟电压,其详细设置步骤如下:
1.开启 PA 口时钟,设置 PA4 为模拟输入
STM32F103RCT6 的 DAC 通道 1 是接在 PA4 上的,所以,我们先要使能 PORTA 的时钟,然后设置 PA4 为模拟输入(虽然是输入,但是 STM32 内部会连接在 DAC 模拟输出上)。
RCC->APB2ENR |= 1<<2;
GPIOA->CRL &= 0XFFF0FFFF;
GPIOA->CRL |= 0X00000000;
2.使能 DAC1 时钟
同其他外设一样,要想使用,必须先开启相应的时钟。 STM32 的 DAC 模块时钟是由APB1 提供的,所以我们先要在 APB1ENR 寄存器里面设置 DAC 模块的时钟使能。
RCC->APB1ENR |= 1<<29;
3.设置 DAC 的工作模式
该部分设置全部通过 DAC_CR 设置实现,包括: DAC 通道 1 使能、 DAC 通道 1 输出缓存关闭、不使用触发、不使用波形发生器等设置。
DAC->CR |= 1<<0;
DAC->CR |= 1<<1;
DAC->CR |= 0<<2;
DAC->CR |= 1<<0;
DAC->CR |= 1<<1;
DAC->CR |= 0<<2;
DAC->CR |= 0<<3;
DAC->CR |= 0<<6;
DAC->CR |= 0<<8;
DAC->CR |= 0<<12;
DAC->DHR12R1 = 0;
4.设置 DAC 的输出值
通过前面 3 个步骤的设置, DAC 就可以开始工作了,我们使用 12 位右对齐数据格式,所以我们通过设置 DHR12R1,就可以在 DAC 输出引脚(PA4)得到不同的电压值了
void Dac1_Set_Vol(u16 vol){
float temp = vol;
temp /= 1000;
temp = temp*4096/3.3;
DAC->DHR12R1 = temp;
}
|