利用DAC输出恒定电压值(无触发)

本人,尝试用DAC控制通道输出固定电压。参考了野火利用定时器和DMA去生成正弦波的方法没有成功。将触发方式按照网上资料改为软件触发,添加相应函数仍为得到解决。后来才晓得DAC不是每个型号都有
在这里插入图片描述
这里我用无触发方式,将参数写入DAC_SetChannel1Data()即可,首先是DAC配置函数

void DAC_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
	DAC_InitTypeDef  DAC_InitStructure;

  /* 使能GPIOA时钟 */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	
	
	/* 使能DAC时钟 */	
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
	
  /* DAC的GPIO配置,模拟输入 */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
	


  /* 配置DAC 通道1 */
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;													//使用软件触发作为触发源
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;						//不使用波形发生器
	DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;						//不使用DAC输出缓冲
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);
	
  DAC_Cmd(DAC_Channel_1, ENABLE);
}

配置好后,利用相关函数直接赋值给DAC,每三秒增加一点幅值,增加十次

int main(void)
{		
	delay_init();	    	 //延时函数初始化	  
	
	uart_init(115200);	 	//串口初始化为115200
	
	//配置DAC,12位0-4095.对应0-3.3v
	DAC_Config();
	
	while(1)
	{
		int i,a=0;
		for(i=0;i<11;i++)
		{
			
			a = i*400;
			//该函数控制对应通道输出电压的幅值
			DAC_SetChannel1Data(DAC_Align_12b_R,a);
			
			delay_ms(1500);
			delay_ms(1500);
			printf("a  :%d \r\n",a);
		}
		
		
	}	 
}

利用adc采集结果
在这里插入图片描述
最后补充一点,我是在b站看了刘洋老师的DAC视频,才尝试使用无需触发的模式的。到最后也没搞清楚为什么用别的触发方式无法实现要求。也许是别的地方有问题。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值