[STM32F1] DAC(数模转换模块)-STM32F103

[复制链接]
1715|25
 楼主| 哈根达斯uz 发表于 2022-1-29 11:39 | 显示全部楼层
 楼主| 哈根达斯uz 发表于 2022-1-29 11:40 | 显示全部楼层
寄存器版本代码-定时器计时
  1. //DAC通道1输出初始化
  2. void Dac1_Init(void)
  3. {
  4.         RCC->APB2ENR|=1<<2;    //使能PORTA时钟
  5.         RCC->APB1ENR|=1<<29;   //使能DAC时钟        
  6.                     
  7.         GPIOA->CRL&=0XFFF0FFFF;
  8.         GPIOA->CRL|=0X00000000;//PA4 模拟输入   

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

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

  29. //改变频率,重新计时
  30. void TIM2_DAC_REINIT(u16 hz)//¸改变频率
  31. {       
  32.         u16 arr;
  33.         arr = 72000000/(hz * 256); // 通过hz改变重装载值
  34.         TIM2->CR1|=0x00;    //关闭定时器2
  35.         TIM2->ARR=arr;          //自动重装载值
  36.         TIM2->CR1|=0x01;    //使能定时器2
  37. }
 楼主| 哈根达斯uz 发表于 2022-1-29 11:41 | 显示全部楼层
定时器根据频率计算重装载值

9828961f4b77f8af95.png
 楼主| 哈根达斯uz 发表于 2022-1-29 15:22 | 显示全部楼层
 楼主| 哈根达斯uz 发表于 2022-1-29 15:22 | 显示全部楼层
在实际应用中,可以根据工程里的正弦波点数和定时器配置生成特定频率的正弦波。这里我用的是256点产生数据。
 楼主| 哈根达斯uz 发表于 2022-1-29 15:28 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部