寄存器版本代码-定时器计时
//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
}
|