weixin_48732460 2022-06-27 23:12 采纳率: 57.1%
浏览 28
已结题

关于C语言AD转换的问题

求问这段代码的解释


```c
#define AD_LEN    200
u16  arry_ph_tip,arry_ph_ad[AD_LEN],arry_average_ph;
void TIM3_IRQHandler(void)
{     
  static u8 tip;
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
    {
         arry_ph_tip=(arry_ph_tip+1)%AD_LEN;
         arry_ph_ad[arry_ph_tip]=vad_get();
         if(arry_ph_tip>=(AD_LEN-1))
         {
            arry_average_ph=vAverage(arry_ph_ad,AD_LEN); 
            vddl_get_ph(((float)arry_average_ph*3250.f/4095.f-1780.0)/2.0);//3260  ad的Vref
         } 
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  
    }        
}

```

  • 写回答

1条回答 默认 最新

  • emXiaoMing 2022-06-28 08:42
    关注
    #define AD_LEN    200  //AD采样结果的数组最大长度
    u16  arry_ph_tip,arry_ph_ad[AD_LEN],arry_average_ph;
    void TIM3_IRQHandler(void)//TIM3中断服务函数
    {     
      static u8 tip;
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //TIM3发生更新中断
        {
             arry_ph_tip=(arry_ph_tip+1)%AD_LEN;  //arry_ph_tip是采样次数,每次采样+1,范围0~AD_LEN
             arry_ph_ad[arry_ph_tip]=vad_get();  //arry_ph_ad数组的第arry_ph_tip个值存放当前采样结果
             if(arry_ph_tip>=(AD_LEN-1))  //如果采样次数>=AD_LEN-1
             {
                arry_average_ph=vAverage(arry_ph_ad,AD_LEN);   //取所有采样值的平均值
                vddl_get_ph(((float)arry_average_ph*3250.f/4095.f-1780.0)/2.0);//3260  ad的Vref  //根据12bit平均采样值计算电压
             } 
            TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );    //清除TIM3更新中断标志位
        }        
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 已采纳回答 6月28日
  • 创建了问题 6月27日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持