搜索

[技术问答] HK32f103cbt6 ADC 问题

[复制链接]
121|8
 楼主 | 2021-4-15 11:16 | 显示全部楼层 |阅读模式
本帖最后由 zcguoji 于 2021-4-15 12:46 编辑

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

  1. #include "power-adc.h"

  2. #define USED_ADC1 ADC1
  3. #define USED_ADC_RCC RCC_APB2Periph_ADC1
  4. #define USED_ADC_GPIO_RCC RCC_APB2Periph_GPIOA

  5. #define USED_ADC_PORT GPIOA
  6. #define USED_ADC_PIN  GPIO_Pin_4
  7. #define USED_ADC_CHANNEL ADC_Channel_4

  8. float voltage;
  9. //ADC时钟开启
  10. void ADC_RCC_Configuration(void)
  11. {
  12.     RCC_APB2PeriphClockCmd(USED_ADC_GPIO_RCC | USED_ADC_RCC, ENABLE);
  13.     RCC_ADCCLKConfig(RCC_PCLK2_Div6);
  14. }
  15. //ADC GPIO设置
  16. void ADC_GPIO_Config(void)
  17. {
  18.     GPIO_InitTypeDef        GPIO_InitStructure;
  19.     GPIO_InitStructure.GPIO_Pin = USED_ADC_PIN;
  20.     //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  21.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  22.     GPIO_Init(USED_ADC_PORT,&GPIO_InitStructure);
  23. }
  24. //ADC 设置
  25. void ADC_Config(ADC_TypeDef* ADCx,uint8_t ADC_Channel)
  26. {
  27.     ADC_InitTypeDef ADC_InitStructure;
  28.           //ADC_StructInit(&ADC_InitStructure);
  29.     ADC_DeInit(ADCx);
  30.     ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  31.     ADC_InitStructure.ADC_ScanConvMode =DISABLE;
  32.     ADC_InitStructure.ADC_ContinuousConvMode = DISABLE ;
  33.     ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  34.     ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  35.     ADC_InitStructure.ADC_NbrOfChannel = 1;
  36.     ADC_Init(ADCx,&ADC_InitStructure);
  37.     DELAY_SOME(10);
  38.     ADC_RegularChannelConfig(ADCx, ADC_Channel, 1, ADC_SampleTime_239Cycles5 );
  39.     DELAY_SOME(10);
  40.     ADC_Cmd(ADCx, ENABLE);
  41.     DELAY_SOME(10);

  42.     ADC_ResetCalibration(ADCx);
  43.     while(ADC_GetResetCalibrationStatus(ADCx));
  44.     DELAY_SOME(10);
  45.     ADC_StartCalibration(ADCx);
  46.     while(ADC_GetCalibrationStatus(ADCx));



  47. }
  48. //初始化ADC
  49. void ADC_INIT()
  50. {
  51.     //ADC时钟开启
  52.     ADC_RCC_Configuration();
  53.     //ADC GPIO设置
  54.     ADC_GPIO_Config();

  55.     //ADC 设置
  56.     ADC_Config(USED_ADC1,USED_ADC_CHANNEL);
  57. }

  58. //获取ADC的值
  59. void get_ADC_Value()
  60. {
  61.     ADC_ClearFlag(USED_ADC1,ADC_FLAG_EOC);
  62.     ADC_SoftwareStartConvCmd(USED_ADC1, ENABLE);//开启ADC
  63.     DELAY_SOME(10);
  64.     while(RESET == ADC_GetFlagStatus(USED_ADC1,ADC_FLAG_EOC));
  65.     voltage = 3.3*ADC_GetConversionValue(USED_ADC1)/4096;
  66.     ADC_ClearFlag(USED_ADC1,ADC_FLAG_EOC);
  67.     ADC_SoftwareStartConvCmd(USED_ADC1, DISABLE);//关闭ADC

  68. }
复制代码



使用特权

评论回复
| 2021-4-16 11:43 | 显示全部楼层
你参考一下我们的103的应用笔记

HK32F103应用笔记V1.0.35.pdf

1.92 MB, 下载次数: 25

使用特权

评论回复
 楼主 | 2021-4-16 21:07 | 显示全部楼层
annko2005 发表于 2021-4-16 11:43
你参考一下我们的103的应用笔记

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

使用特权

评论回复
| 2021-4-18 14:34 | 显示全部楼层
航顺不一定有这步操作哦,建议看下官方代码。

使用特权

评论回复
| 2021-4-18 18:40 | 显示全部楼层
先确认航顺有没有校验这个过程

使用特权

评论回复
| 2021-4-18 21:36 | 显示全部楼层
直接DMA用的adc最安全。

使用特权

评论回复
| 2021-4-19 09:17 | 显示全部楼层
参照一下官方代码吧

使用特权

评论回复
 楼主 | 2021-4-19 10:41 | 显示全部楼层
多谢,楼上各位,请教下,航顺的官方代码或者例程,哪里可以下载?

使用特权

评论回复
 楼主 | 2021-4-19 14:02 | 显示全部楼层
lidi911 发表于 2021-4-18 18:40
先确认航顺有没有校验这个过程

看了,是有校验的步骤的

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表