打印
[技术问答]

HK32f103cbt6 ADC 问题

[复制链接]
1165|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zcguoji|  楼主 | 2021-4-15 11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zcguoji 于 2021-4-15 12:46 编辑

您好,我现在用航顺的HK32f103cbt6遇到了ADC不能用的情况,卡在了校准这里,while(ADC_GetCalibrationStatus(ADCx)); 在stm32上面是正常使用的,代码如下

#include "power-adc.h"

#define USED_ADC1 ADC1
#define USED_ADC_RCC RCC_APB2Periph_ADC1
#define USED_ADC_GPIO_RCC RCC_APB2Periph_GPIOA

#define USED_ADC_PORT GPIOA
#define USED_ADC_PIN  GPIO_Pin_4
#define USED_ADC_CHANNEL ADC_Channel_4

float voltage;
//ADC时钟开启
void ADC_RCC_Configuration(void)
{
    RCC_APB2PeriphClockCmd(USED_ADC_GPIO_RCC | USED_ADC_RCC, ENABLE);
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);
}
//ADC GPIO设置
void ADC_GPIO_Config(void)
{
    GPIO_InitTypeDef        GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = USED_ADC_PIN;
    //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(USED_ADC_PORT,&GPIO_InitStructure);
}
//ADC 设置
void ADC_Config(ADC_TypeDef* ADCx,uint8_t ADC_Channel)
{
    ADC_InitTypeDef ADC_InitStructure;
          //ADC_StructInit(&ADC_InitStructure);
    ADC_DeInit(ADCx);
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode =DISABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE ;
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = 1;
    ADC_Init(ADCx,&ADC_InitStructure);
    DELAY_SOME(10);
    ADC_RegularChannelConfig(ADCx, ADC_Channel, 1, ADC_SampleTime_239Cycles5 );
    DELAY_SOME(10);
    ADC_Cmd(ADCx, ENABLE);
    DELAY_SOME(10);

    ADC_ResetCalibration(ADCx);
    while(ADC_GetResetCalibrationStatus(ADCx));
    DELAY_SOME(10);
    ADC_StartCalibration(ADCx);
    while(ADC_GetCalibrationStatus(ADCx));



}
//初始化ADC
void ADC_INIT()
{
    //ADC时钟开启
    ADC_RCC_Configuration();
    //ADC GPIO设置
    ADC_GPIO_Config();

    //ADC 设置
    ADC_Config(USED_ADC1,USED_ADC_CHANNEL);
}

//获取ADC的值
void get_ADC_Value()
{
    ADC_ClearFlag(USED_ADC1,ADC_FLAG_EOC);
    ADC_SoftwareStartConvCmd(USED_ADC1, ENABLE);//开启ADC
    DELAY_SOME(10);
    while(RESET == ADC_GetFlagStatus(USED_ADC1,ADC_FLAG_EOC));
    voltage = 3.3*ADC_GetConversionValue(USED_ADC1)/4096;
    ADC_ClearFlag(USED_ADC1,ADC_FLAG_EOC);
    ADC_SoftwareStartConvCmd(USED_ADC1, DISABLE);//关闭ADC

}



使用特权

评论回复

相关帖子

沙发
annko2005| | 2021-4-16 11:43 | 只看该作者
你参考一下我们的103的应用笔记

HK32F103应用笔记V1.0.35.pdf

1.92 MB

使用特权

评论回复
板凳
zcguoji|  楼主 | 2021-4-16 21:07 | 只看该作者
annko2005 发表于 2021-4-16 11:43
你参考一下我们的103的应用笔记

你好,应用手册看过了,ADC相关的没有对应的解决方法,还请帮忙看下代码,麻烦了!多谢!

使用特权

评论回复
地板
zhengshuai888| | 2021-4-18 14:34 | 只看该作者
航顺不一定有这步操作哦,建议看下官方代码。

使用特权

评论回复
5
lidi911| | 2021-4-18 18:40 | 只看该作者
先确认航顺有没有校验这个过程

使用特权

评论回复
6
嵌入小菜菜| | 2021-4-18 21:36 | 只看该作者
直接DMA用的adc最安全。

使用特权

评论回复
7
两只袜子| | 2021-4-19 09:17 | 只看该作者
参照一下官方代码吧

使用特权

评论回复
8
zcguoji|  楼主 | 2021-4-19 10:41 | 只看该作者
多谢,楼上各位,请教下,航顺的官方代码或者例程,哪里可以下载?

使用特权

评论回复
9
zcguoji|  楼主 | 2021-4-19 14:02 | 只看该作者
lidi911 发表于 2021-4-18 18:40
先确认航顺有没有校验这个过程

看了,是有校验的步骤的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

1

粉丝