STM32F103的ADC基于DMA方式传输数据发生错位现象解决

STM32F103的ADC基于DMA方式传输数据发生错位现象解决

实验要求

不停的读取10个ADC的值,用DMA发送

实现过程

想要获取ADC的值,我们要对ADC进行初始化的配置,通过查阅手册要按照以下的方式进行ADC初始化。

  1. 开启IO口,设置模拟输入。
  2. 使能ADC1时钟,并设置分频因子。
  3. 设置ADC1的工作模式。
  4. 设置ADC1规则序列的相关信息。
  5. 开启AD转换,并校准。
  6. 开启规则序列转换ADC值进行读取。

因为要求是获取10个ADC的值,通过比对选择了比较简单的规则序列转换。通过对比将10个序列信息依次配置好。
按照要求通过DMA传输方式将ADC的数值保存下来。根据中文手册传输ADC1的DMA通道是channel1。将DMA和ADC配置好后,开始编译。
DMA配置如下图:在这里插入图片描述

void Adc_Init(void)
{
       
   //先初始化IO口
	RCC->APB2ENR|=1<<2;    //使能PORTA口时钟 
   RCC->APB2ENR|=1<<3;    //使能PORTB口时钟 
   RCC->APB2ENR|=1<<4;    //使能PORTC口时钟 
   
   RCC->APB2ENR|=1<<6;    //使能PORTE口时钟   HC4951M 使用
   GPIOE->CRL&=0XFF000FFF; 
   GPIOE->CRL|=0X00222000;	//PE. 3/4/5推挽输出   	 
   GPIOE->ODR|=7<<3;      	//PE 3.4.5输出高
   
   GPIOA->CRL&=0Xfffff0f0;//PA0,PA2 anolog输入  ADC0,2
   GPIOA->CRL|=0X00000000;//PA0,PA2 anolog输入

   GPIOB->CRL&=0Xffffff00;//PB0-PB1 anolog输入  ADC9~10
   GPIOB->CRL|=0X00000000;//PB0-PB1 anolog输入	
   
   GPIOC->CRL&=0Xff000000;//PC0-PC5 anolog输入  ADC11~16
   GPIOC->CRL|=0X00000000;//PC0-PC5 anolog输入
   
   RCC->APB2ENR|=1<<9;    //ADC1时钟使能	  
   RCC->APB2RSTR|=1<<9;   //ADC1复位
   RCC->APB2RSTR&=~(1<<9);//复位结束	    
   RCC->CFGR&=~(3<<14);   //分频因子清零
   RCC->CFGR|=2<<14;  
   //SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!
   //否则将导致ADC准确度下降! 

   ADC1->CR1&=0XF0FFFF;   //工作模式清零
   ADC1->CR1|=0<<16;      //独立工作模式  
   
   ADC1->CR1|=1<<8;    		//扫描模式,1使能,0禁止
   
   ADC1</
  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值