stm32ad转换单次转换模式注入组2个转换,同时采集光强和电压
本帖最后由 于鱼同游 于 2016-9-20 17:31 编辑#include "stm32f4xx.h"
//#include "adc.h"
/*ADC1 IN4 引脚PA4,测量光照强度,ADC1 IN5 引脚PA5,测量电位器电压*/
void adc1_init_in4()
{
RCC->AHB1ENR |=1;//pa引脚时钟使能
RCC->APB2ENR |=1<<8;//adc1时钟使能
GPIOA->MODER |=3<<8;//PA4模拟模式输出
GPIOA->MODER |=3<<10;//PA5模拟模式输出
ADC->CCR |=3<<16;//8分频ADCLK=PCLK2/8
ADC1->CR1 &=~(3<<24);//ADC分辨率12位
ADC1->CR2 &=~(3<<20);//禁止注入组外部触发,软件方式启动注入组转换
ADC1->SMPR2 |=7<<12;//IN4采样时间480个周期
ADC1->SMPR2 |=7<<15;//IN5采样时间480个周期
ADC1->JSQR&=~(3<<20);
ADC1->JSQR |=1<<20;//注入组2个转换
ADC1->JSQR &=~(0X1F<<10);
ADC1->JSQR |=5<<10;//注入组第一次转换为IN5
ADC1->JSQR &=~(0X1F<<15);
ADC1->JSQR |=4<<15;//注入组第2次转换为通道4
ADC1->CR2 |=1;//使能ADC
}
u16 start_adc1_4()
{
ADC1->CR2 |=1<<22;//启动ad转换
while((ADC1->SR &1<<2)==0)
{
;//等待转换结束
}
// ADC1->SR &=~(1<<2);
return ADC1->JDR1 ;//第一次转换组结果(电位器电压)
}
u16 start_adc1_5()
{
ADC1->CR2 |=1<<22;//启动ad转换
while((ADC1->SR &1<<2)==0)
{
;//等待转换结束
}
// ADC1->SR &=~(1<<2);
return ADC1->JDR2 ;//第二次转换组结果(光敏电阻光强)
}上面的是adc文件代码,主函数文件代码如下
#include "stm32f4xx.h"
#include "key.h"
#include "LED.h"
#include "UART.h"
#include "delay.h"
#include "lcd_gui.h"
#include "rtc.h"
#include <stdio.h>
#include "set.h"
#include "lcd.h"
#include "adc.h"
//时钟源 25M
int main()
{
u8 buf;
u16 temp1,temp2;
init_lcd();//触摸屏初始化
init_uart1();//串口初始化
adc1_init_in4();//AD转换初始化
lcd_dis_string(68, 100, RED, (u8 *)"dwq:");
lcd_dis_string(68, 116, RED, (u8 *)"gzq:");//触摸屏显示字符串
while(1)
{
/*显示光强*/
temp2=start_adc1_5();//开始转换通道5(采集光强)
sprintf((char *)buf,"%4d",temp2);//转换的数据存到数组中
lcd_dis_string(100, 116, RED, (u8 *)buf);//触摸屏显示数据
printf("gzq:%.3f\r\n",temp2*(3.3/4096));//串口发数据(用来检查电压是否在0~3.3v)
delay_ms(250);
/*显示电位器电压*/
temp1=start_adc1_4();
sprintf((char *)buf,"%4d",temp1);//开始转换通道4电位器电压采集
lcd_dis_string(100, 100, RED, (u8 *)buf);
printf("dwq:%.3f\r\n",temp1*(3.3/4096));
delay_ms(250);
}
}
第一次转换的结果没问题,但第二次转换结果数据总是0.比如第一次转换电压时,第二次光强转换数据为0,第一次转换光强时,第二次转换电压数据为0.求解决,急!!!!!!
第一次在论坛问问题,很多不懂,不知道有没有大神会帮忙啊!
给你个多通道AD转换例程参考
【HAL库每天一例】第023例:ADC-多通道采集(DMA)
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=606231&fromuid=331315
(出处: 意法半导体STM32/STM8技术社区)
学习学习 你那个AD的寄存器是不是要清一下啊 你才转换2个通道,何必使用注入方式,你用连续多通道转换即可,ST官方有例程修改一下就可以了。
你先测一下传感器是否有输出 切换通道后,建议增加延时。 haohao663 发表于 2016-9-21 08:57
给你个多通道AD转换例程参考
【HAL库每天一例】第023例:ADC-多通道采集(DMA)
https://www.stmcu.org.cn/module ...
thanks
页:
[1]