你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32C031试用(5)过采样ADC

[复制链接]
wenyangzeng 提问时间:2023-4-4 19:08 / 已解决
       这片STM320C31的ADC具有过采样功能,这次评测就采用过采样128位,右移3位的ADC模式,这样12位ADC就能够得到16位ADC的分辨率。CubeMX里的ADC配置如下:

无标题1.png

    配置ADC时发现STM32C031不像其他型号一样可以从下拉选项使能ADC,而是要从引脚图中直接点击相应引脚使能ADC。
无标题.png

主要代码

  1. void MX_ADC1_Init(void)
  2. {

  3.   ADC_ChannelConfTypeDef sConfig = {0};

  4.   hadc1.Instance = ADC1;
  5.   hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV8;
  6.   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  7.   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  8.   hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  9.   hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  10.   hadc1.Init.LowPowerAutoWait = DISABLE;
  11.   hadc1.Init.LowPowerAutoPowerOff = DISABLE;
  12.   hadc1.Init.ContinuousConvMode = ENABLE;
  13.   hadc1.Init.NbrOfConversion = 1;
  14.   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  15.   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  16.   hadc1.Init.DMAContinuousRequests = DISABLE;
  17.   hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
  18.   hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_79CYCLES_5;
  19.   hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_160CYCLES_5;
  20.   hadc1.Init.OversamplingMode = ENABLE;
  21.   hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_128;
  22.   hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_3;
  23.   hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
  24.   hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
  25.   if (HAL_ADC_Init(&hadc1) != HAL_OK)
  26.   {
  27.     Error_Handler();
  28.   }

  29.   sConfig.Channel = ADC_CHANNEL_6;
  30.   sConfig.Rank = ADC_REGULAR_RANK_1;
  31.   sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_2;
  32.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  33.   {
  34.     Error_Handler();
  35.   }

  36. }




  37. int main(void)
  38. {
  39.   HAL_Init();
  40.   SystemClock_Config();
  41.   MX_GPIO_Init();
  42.   MX_ADC1_Init();
  43.   LCD_Init();
  44.   LCD_Print(16, 8,"OVERSAMPLING",TYPE16X16,TYPE8X16);
  45.   LCD_Print(48, 24,"ADC",TYPE16X16,TYPE8X16);
  46.   HAL_ADCEx_Calibration_Start(&hadc1) ;        
  47.   HAL_ADC_Start_IT(&hadc1);

  48.   while (1)
  49.   {
  50.             uwInputVoltage = uwConvertedValue * 3300;  
  51.             uwInputVoltage = uwInputVoltage / 0xFFF0;
  52.         To_buffer(uwInputVoltage);
  53.         LCD_Print(30, 48,Buff,1,1);
  54.         HAL_Delay(200);

  55.   }

  56. }

  57. void ADC1_IRQHandler(void)
  58. {
  59. uwConvertedValue= LL_ADC_REG_ReadConversionData32(ADC1);
  60.   HAL_ADC_IRQHandler(&hadc1);
  61. }
复制代码



     ADC通道6连接可调电阻输入0-3.3V电压,结合上一贴的OLED显示,将电压值在屏幕显示。


无标题5.png


      STM320C31的过采样ADC大大提高了STM320C31ADC转换分辨率,是STM8S系列无法相对比的。它是替代STM8S的首选。
    本次 STM320C31试用评测完成。


收藏 评论2 发布时间:2023-4-4 19:08

举报

2个回答
STMCU-管管 回答时间:2023-4-7 09:00:02
感谢发帖,下次可否发在话题—STM32团队—文章中
wenyangzeng 回答时间:2023-4-9 21:00:31

STMCU-管管 发表于 2023-4-7 09:00
感谢发帖,下次可否发在话题—STM32团队—文章中

不好意思,原来评测要求发帖是在“STM32团队版块”,我不知道要进入“文章”板块。下次会注意。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版