历史上的今天
返回首页

历史上的今天

今天是:2025年03月04日(星期二)

正在发生

2019年03月04日 | STM32 三路AD的使用方法

2019-03-04 来源:eefocus


void ADC_ChannelSelect(uint32_t ADChannel)

{

    //  ADC_ChannelConfTypeDef sConfig;

 

    sConfig.Channel = ADChannel;

    sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;//ADC_RANK_CHANNEL_NUMBER;//1;//ADC_RANK_CHANNEL_NUMBER;

    sConfig.SamplingTime = ADC_SAMPLETIME_13CYCLES_5;

    if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)

    {

        _Error_Handler(__FILE__, __LINE__);

    }

}

 

 

HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig)

{

  HAL_StatusTypeDef tmp_hal_status = HAL_OK;

  __IO uint32_t wait_loop_index = 0U;

 

  /* Check the parameters */

  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));

  assert_param(IS_ADC_CHANNEL(sConfig->Channel));

  assert_param(IS_ADC_RANK(sConfig->Rank));

  

  if (! IS_ADC_SAMPLE_TIME(hadc->Init.SamplingTimeCommon))

  {

    assert_param(IS_ADC_SAMPLE_TIME(sConfig->SamplingTime));

  }

  

  /* Process locked */

  __HAL_LOCK(hadc);

  

  /* Parameters update conditioned to ADC state:                              */

  /* Parameters that can be updated when ADC is disabled or enabled without   */

  /* conversion on going on regular group:                                    */

  /*  - Channel number                                                        */

  /*  - Channel sampling time                                                 */

  /*  - Management of internal measurement channels: VrefInt/TempSensor/Vbat  */

  if (ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET)

  {

    /* Configure channel: depending on rank setting, add it or remove it from */

    /* ADC conversion sequencer.                                              */

    if (sConfig->Rank != ADC_RANK_NONE)

    {

      /* Regular sequence configuration */

      /* Set the channel selection register from the selected channel */

      if (sConfig->Channel == 0)

      {

            hadc->Instance->CHSELR = 0x01;

      }

       else if (sConfig->Channel == 4)

       {

            hadc->Instance->CHSELR = 0x10;

       }

        else if (sConfig->Channel == 6)

        {

            hadc->Instance->CHSELR = 0x40;

        }    

    //  hadc->Instance->CHSELR |= ADC_CHSELR_CHANNEL(sConfig->Channel);

      

      /* Channel sampling time configuration */

      /* Management of parameters "SamplingTimeCommon" and "SamplingTime"     */

      /* (obsolete): sampling time set in this function with                  */

      /* parameter "SamplingTime" (obsolete) only if not already set into     */

      /* ADC initialization structure with parameter "SamplingTimeCommon".    */

      if (! IS_ADC_SAMPLE_TIME(hadc->Init.SamplingTimeCommon))

      {

        /* Modify sampling time if needed (not needed in case of reoccurrence */

        /* for several channels programmed consecutively into the sequencer)  */

        if (sConfig->SamplingTime != ADC_GET_SAMPLINGTIME(hadc))

        {

          /* Channel sampling time configuration */

          /* Clear the old sample time */

          hadc->Instance->SMPR &= ~(ADC_SMPR_SMP);

          

          /* Set the new sample time */

          hadc->Instance->SMPR |= ADC_SMPR_SET(sConfig->SamplingTime);

        }

      }

      

      /* Management of internal measurement channels: VrefInt/TempSensor/Vbat */

      /* internal measurement paths enable: If internal channel selected,     */

      /* enable dedicated internal buffers and path.                          */

      /* Note: these internal measurement paths can be disabled using         */

      /*       HAL_ADC_DeInit() or removing the channel from sequencer with   */

      /*       channel configuration parameter "Rank".                        */

      if(ADC_IS_CHANNEL_INTERNAL(sConfig->Channel))

      {

        /* If Channel_16 is selected, enable Temp. sensor measurement path. */

        /* If Channel_17 is selected, enable VREFINT measurement path. */

        /* If Channel_18 is selected, enable VBAT measurement path. */

        ADC->CCR |= ADC_CHANNEL_INTERNAL_PATH(sConfig->Channel);

        

        /* If Temp. sensor is selected, wait for stabilization delay */

        if (sConfig->Channel == ADC_CHANNEL_TEMPSENSOR)

        {

          /* Delay for temperature sensor stabilization time */

          /* Compute number of CPU cycles to wait for */

          wait_loop_index = (ADC_TEMPSENSOR_DELAY_US * (SystemCoreClock / 1000000U));

          while(wait_loop_index != 0U)

          {

            wait_loop_index--;

          }

        }

      }

    }

    else

    {

      /* Regular sequence configuration */

      /* Reset the channel selection register from the selected channel */

      hadc->Instance->CHSELR &= ~ADC_CHSELR_CHANNEL(sConfig->Channel);

      

      /* Management of internal measurement channels: VrefInt/TempSensor/Vbat */

      /* internal measurement paths disable: If internal channel selected,    */

      /* disable dedicated internal buffers and path.                         */

      if(ADC_IS_CHANNEL_INTERNAL(sConfig->Channel))

      {

        /* If Channel_16 is selected, disable Temp. sensor measurement path. */

        /* If Channel_17 is selected, disable VREFINT measurement path. */

        /* If Channel_18 is selected, disable VBAT measurement path. */

        ADC->CCR &= ~ADC_CHANNEL_INTERNAL_PATH(sConfig->Channel);

      }

    }

    

  }

   

  /* If a conversion is on going on regular group, no update on regular       */

  /* channel could be done on neither of the channel configuration structure  */

  /* parameters.                                                              */

  else

  {

    /* Update ADC state machine to error */

    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);

    

    tmp_hal_status = HAL_ERROR;

  }

  

  /* Process unlocked */

  __HAL_UNLOCK(hadc);

  

  /* Return function status */

  return tmp_hal_status;

}



推荐阅读

史海拾趣

CHINFA公司的发展小趣事

作为一家有社会责任感的企业,CHINFA公司始终关注社会公益事业。公司积极参与扶贫济困、捐资助学等公益活动,为社会做出了积极贡献。同时,公司还注重员工培训和福利保障,为员工提供了良好的工作环境和发展机会。这种对社会责任的担当和履行,使CHINFA公司赢得了社会各界的广泛认可和尊重。

这五个故事只是CHINFA公司发展历程中的一部分,但它们却充分展示了公司在电子行业中的坚韧不拔、追求卓越的精神风貌。相信在未来的发展中,CHINFA公司将继续书写更加辉煌的篇章。

e2v technologies公司的发展小趣事

2016年,e2v被Teledyne Technologies公司收购,成为Teledyne e2v。这一合并不仅为e2v带来了更多的资源和支持,也为其开启了新的发展篇章。Teledyne e2v在继续保持其在图像传感器领域的领先地位的同时,也积极拓展新的市场和应用领域,为电子行业的发展贡献更多的力量。

Equinox公司的发展小趣事

随着时间的推移,Equinox的成功吸引了越来越多的投资者。公司开始寻求全球扩张的机会,并在不同国家和地区开设新的健身俱乐部。同时,Equinox还推出了多个子品牌,如E By Equinox、SoulCycle等,以满足不同消费者的需求。这些品牌涵盖了从高端豪华到平价实惠的全方位市场,进一步巩固了Equinox在健身行业的领先地位。

明波通信(BWAVE)公司的发展小趣事

在2002年,一群从海外归来的留学生和技术专家,怀揣着对通信技术的热情与梦想,在上海创立了明波通信技术股份有限公司。他们深知国内在通信领域的技术与海外相比还有较大差距,因此决心将自己在海外学到的先进知识和经验,应用到国内的市场和技术创新中。明波通信从创立之初就致力于数字电视芯片的研究与开发,并逐渐在行业中崭露头角。

冠图电子(GTL-POWER)公司的发展小趣事

为了进一步扩大市场份额,Catalyst公司积极实施国际化战略。公司通过与国外知名企业的合作与交流,引进先进的技术和管理经验,不断提升自身的竞争力。同时,Catalyst还积极参加国际电子展会和论坛,展示公司的最新产品和技术成果,吸引了众多国际客户的关注。通过国际化战略的拓展,Catalyst成功打开了海外市场的大门,为公司的长远发展奠定了坚实的基础。

Autonics公司的发展小趣事

作为一家具有社会责任感的企业,Autonics不仅注重经济效益的发展,还积极参与公益事业和环保活动。公司致力于推动绿色生产,减少对环境的影响。同时,Autonics还关注员工福利和社会贡献,为员工提供良好的工作环境和发展空间,积极回馈社会。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

以上五个故事仅是对Autonics公司发展起来的一些重要阶段的概括性描述,并未涉及具体的细节和内部信息。如需了解更多关于Autonics公司的发展历程和故事,建议查阅相关新闻报道、行业分析报告或公司官方网站。

问答坊 | AI 解惑

江苏人民好幸福,俺也想用华丽丽免费的手机上网~~

这两天出差到南京,就感觉到江苏人民可真是幸福,用江苏电信的E9套餐算算,去掉赠送的600分钟+400分钟这一摊固话和手机通话费(挺复杂,送的特别多,这些话费一毛一分钟都已经有小一百块钱了),几乎是一天一块钱宽带了,可真是让偶介个首都人民眼 ...…

查看全部问答>

CPLD的双向端口问题!毕设啊求助!

现在PCI数据线与CPLD相连,有一个功能是测速,首先用LAD0发一个控制信号,然后如入LAD[15..0]的数据。 由于LAD0需要双向,因此将LAD[15..0]都设为Bir(在顶层框图中)但是发现通过LAD0根本写入不了命令,不知为什么? 现在只能LAD0只作输入 其余1 ...…

查看全部问答>

Uboot中那个函数可以使其重启

RT, 想在里面添加一个reboot命令,请了解的仁兄指点.…

查看全部问答>

自制廉价的GPS外接天线

    有网友试过,效果确实不错:宿舍窗台上(11楼)不到20秒,显示了时间,再过几秒,就显示了经纬度,没调,就收到4颗心!!     材料: 同轴线 直径1mm的漆包线200mm以上 敷铜板:长:100mm; 宽:100mm; 敷铜条 ...…

查看全部问答>

嵌入式组态软件系统

    嵌入式组态软件系统以应用为中心,以半导体技术、控制技术计算机    嵌入式组态软件系统技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件与硬件可剪裁,以满足系统对功能、成本、体积和功耗等要求。 ...…

查看全部问答>

STC-ISP

各位大虾,您们好! 我有各问题想请教一下。 我的STC  USB转串口下载 时好时坏,昨晚在宿舍下载好好的一直玩到12点,早山八点到实验室又不能用了。几乎每天都是这样。有时候在实验室能用了 去宿舍又不能用了?? 这个是线的问题么。 PS:ST ...…

查看全部问答>

FPGA控制W5300

有没有大神做过这个项目呀,手头没什么资料,不知道从何下手。…

查看全部问答>

TSP-Link——超越基础(DIO作为触发总线)

测试设置 此测试采用与前一个测试完全同样的脚本,只是这次包括了TSP触发模型。此触发模型使用了2602与3706灵活性高、功能强大的数字I/O控制。   下列指令通过触发模型提高了吞吐量:   测试结果 取决于DUT,此方法能在一次 ...…

查看全部问答>

如何提高IP核的可靠性?

各位大虾,小弟最近在写程序时会经常调用双口RAM,双口RAM的数据读写并不需要同时进行,只有在数据写入RAM之后才会读取RAM中的数据,由于实际应用对安全性要求特别高,而且要长时间应用,我怕RAM不能及时更新数据或者出现其他故障,请教各位有没有 ...…

查看全部问答>