X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
stm32/stm8
[求助] STM32F767AD采样严重不准的问题
chenbingjy
2018-10-19 08:35
楼主
我写了一个STM32F767AD采样的程序。
我测了一下,AD口(PF4)那儿只有0.几V,可是采样值很大0x3c8,0x3cb。
程序如下:
int main(void)
{
u8 i;
float temp;
Cache_Enable(); //打开L1-Cache
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(432,25,2,9); //设置时钟,216Mhz
delay_init(216); //延时初始化
uart_init(115200); //串口初始化
LED_Init(); //初始化LED
SDRAM_Init(); //初始化SDRAM
MY_ADC_Init(); //初始化ADC1通道5
while(1)
{
adcx=Get_Adc_Average(ADC_CHANNEL_14,20);//获取通道5的转换值,20次取平均
i=8;
delay_ms(5);
}
}
以上是主程序。
ADC_HandleTypeDef ADC3_Handler;//ADC句柄
//初始化ADC
//ch: ADC_channels
//通道值 0~16取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16
void MY_ADC_Init(void)
{
ADC3_Handler.Instance=ADC3;
ADC3_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4; //4分频,ADCCLK=PCLK2/4=108/4=27MHZ
ADC3_Handler.Init.Resolution=ADC_RESOLUTION_12B; //12位模式
ADC3_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT; //右对齐
ADC3_Handler.Init.ScanConvMode=DISABLE; //非扫描模式
ADC3_Handler.Init.EOCSelection=DISABLE; //关闭EOC中断
ADC3_Handler.Init.ContinuousConvMode=DISABLE; //关闭连续转换
ADC3_Handler.Init.NbrOfConversion=1; //1个转换在规则序列中 也就是只转换规则序列1
ADC3_Handler.Init.DiscontinuousConvMode=DISABLE; //禁止不连续采样模式
ADC3_Handler.Init.NbrOfDiscConversion=0; //不连续采样通道数为0
ADC3_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START; //软件触发
ADC3_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//使用软件触发
ADC3_Handler.Init.DMAContinuousRequests=DISABLE; //关闭DMA请求
HAL_ADC_Init(&ADC3_Handler); //初始化
}
//ADC底层驱动,引脚配置,时钟使能
//此函数会被HAL_ADC_Init()调用
//hadc:ADC句柄
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_ADC3_CLK_ENABLE(); //使能ADC1时钟
__HAL_RCC_GPIOF_CLK_ENABLE(); //开启GPIOA时钟
GPIO_Initure.Pin=GPIO_PIN_4; //PA5
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟
GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉
HAL_GPIO_Init(GPIOF,&GPIO_Initure);
}
//获得ADC值
//ch: 通道值 0~16,取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16
//返回值:转换结果
u16 Get_Adc(u32 ch)
{
ADC_ChannelConfTypeDef ADC3_ChanConf;
ADC3_ChanConf.Channel=ch; //通道
ADC3_ChanConf.Rank=1; //1个序列
ADC3_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES; //采样时间
ADC3_ChanConf.Offset=0;
HAL_ADC_ConfigChannel(&ADC3_Handler,&ADC3_ChanConf); //通道配置
HAL_ADC_Start(&ADC3_Handler); //开启ADC
HAL_ADC_PollForConversion(&ADC3_Handler,10); //轮询转换
return (u16)HAL_ADC_GetValue(&ADC3_Handler); //返回最近一次ADC1规则组的转换结果
}
//获取指定通道的转换值,取times次,然后平均
//times:获取次数
//返回值:通道ch的times次转换结果平均值
u16 Get_Adc_Average(u32 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}
以上是AD程序。
请大神给我看看,哪儿有问题?谢谢!
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞
回复评论 (3)
沙发
chenbingjy
还有一个问题。AD原理图如下:
接上传感器以后,AD1,AD3都大约是0.7V。
如果只接一个,比如接在U5上,AD1大约0.7V,可是U7出来的
电压值竟然是1.32V。请问高手,这是怎么回事啊?谢谢!
为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
点赞
2018-10-19 09:20
板凳
huo_hu
点赞
2018-10-22 09:18
4楼
xiaoruibest
请问楼主解决了吗
点赞
2024-5-9 10:27
最新活动
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
TI 有奖直播 | 使用基于 Arm 的 AM6xA 处理器设计智能化楼宇
Follow me第二季第3期来啦!与得捷一起解锁高性能开发板【EK-RA6M5】超能力!
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
随便看看
DIY微型节能应急手电
单片机中的cpu是一个逻辑概念,只是一些寄存器,alu的组合,而不是一块实在的硬件,而ram是一块实在的硬件?但pc中的cpu是一个硬件。
转让C2000及仿真器
诚聘嵌入式软件工程师
求助:继电器驱动问题~~
数字信号处理算法逻辑基本概念
最近在做ad7280a的锂电管理,spi不通
高手进来帮个忙
F1大赛,王者归来
【MSP430共享】基于MSP430单片机的开关稳压电源设计
步进电机应用详细资料
《MCU工程师炼成记》印刷错误5
请教排阻的问题
关于wince系统时钟
广西某校的预测/练习题题
为什么BBB的图像不在屏幕中央?
【米尔MYB-YT507开发板试用体验】使用Python获取计算机内存及CPU信息
TMS320F2812 ADC转换时遇到的问题
智能型节能饮水机
压敏电阻、热敏电阻、浪涌
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复