完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
诸君:
使用STM32F429,选择ADC1 PA0作为输入。 所得结果都是大于4096,求解! 另外,试了下将结果与0x0fff,屏蔽最高4位,得出了正确结果,这个是什么道理? 程序都是按照 原子F407 的程序对照修改的。 |
|
相关推荐
8个回答
|
|
只有12位是有效的,详细的可参看相应的文档
|
|
|
|
很可能你将ADC的输出值强制设置成int16或者其他无符号形了吧。或者你数据经过实木处理了。检查一下代码。如果你的信息输出连接的ADC输出没问题那就应该是代码数据格式的错误。不要怀疑429,它也是12bits的,但是你可以设置成10bits和8bits
|
|
|
|
没遇到过,,,,
|
|
|
|
楼主把配置代码发一下。读取AD结果的代码也发一下。
|
|
|
|
/**
* @brief ADC1 Init * @param None * @retval None */ void stm32f4xx_ADC1_Init(void) { /*【Step 1:定义结构体】↓----------------------------------------------------*/ GPIO_InitTypeDef GPIO_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_InitTypeDef ADC_InitStructure; /*【Step 1:结束】↑---------------------------------------------------------*/ /*【Step 2:开启PA口时钟和ADC1时钟,设置PA0为模拟输入】↓----------------------*/ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 /*【Step 2:结束】↑---------------------------------------------------------*/ /*【Step 3:ADC1复位】↓-----------------------------------------------------*/ RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE); /*【Step 3:结束】↑---------------------------------------------------------*/ /*【Step 4:设置ADC的CCR,配置ADC输入时钟分频,模式为独立模式等】↓------------*/ ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&ADC_CommonInitStructure); /*【Step 4:结束】↑---------------------------------------------------------*/ /*【Step 5:初始化ADC1参数,设置分辨率,转换方式,对齐方式,规则序列】↓-------*/ ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐 ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 也就是只转换规则序列1 ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化 /*【Step 5:结束】↑---------------------------------------------------------*/ /*【Step 6:开启AD转换器】↓-------------------------------------------------*/ ADC_Cmd(ADC1, ENABLE); /*【Step 6:结束】↑---------------------------------------------------------*/ } /** * @brief 获得ADC值 * @param ADC_Channel * @retval ADC一次转换结果数据 */ uint16_t Get_ADC(uint8_t ADC_Channel) { ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_480Cycles); ADC_SoftwareStartConv(ADC1); //使能指定的ADC1的软件转换启动功能 while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC))//等待转换结束 { } return ADC_GetConversionValue(ADC1);//返回最近一次ADC1规则组的转换结果 } /** * @brief 获取通道ADC_Channel的转换值,取times次,然后平均 * @param ADC_Channel,times * @retval 平均值 */ uint16_t Get_ADC_Average(uint8_t ADC_Channel,uint8_t times) { uint32_t sum=0; uint8_t n; for(n=0;n sum+=Get_ADC(ADC_Channel); Delay_ms(5); } return sum/times; } |
|
|
|
|
|
|
|
谢谢,程序贴在9楼。
|
|
|
|
楼主仿真一下,配置完ADC以后,ADC-CR1寄存器的值。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1307 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1234 浏览 3 评论
2313 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1404 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1834 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 08:14 , Processed in 0.735010 second(s), Total 55, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号