0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

底层与上层函数的混用存在的问题

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-08-18 12:00 次阅读

项目需求:利用PWM产生加热信号,需要在PWM低信号时采集AD

代码实现部分:

#define heat_det1_open GPIO_SetBits(GPIOB,GPIO_Pin_12)     //引脚PB12打开
#define heat_det1_close GPIO_ResetBits(GPIOB,GPIO_Pin_12)     //引脚PB12关闭
#define heat_det2_open GPIO_SetBits(GPIOB,GPIO_Pin_13)   //引脚PB13打开
#define heat_det2_close GPIO_ResetBits(GPIOB,GPIO_Pin_13)  //引脚PB13关闭
/******************************************************************************
* 负 责 人 : ***

* 函数功能 :控制PB12,PB13开启与关闭进行采集

******************************************************************************/
void heat_std_en()
{
    heat_det1_open;
    heat_det2_open;
}
void heat_std_disen()
{
    heat_det1_close;
    heat_det2_close;
}
/******************************************************************************
* 负 责 人 : ***


******************************************************************************/
double get_Pt_res()
{
    heat_std_en();  //使能det1与det2
    delay_us(5300); //防电压抖动延时
    get_val.ad1 = pm_get_adc(AD1Chn);
    delay_us(50);
    get_val.ad2 = pm_get_adc(AD2Chn);
    delay_us(50);
    get_val.ad3 = pm_get_adc(AD3Chn);
    delay_us(50);

测试发现,这里牵扯到一个问题,底层的函数调用和上层逻辑代码互用,而且存在 一个误区,ad采集的时间与ad采样以及时间延时的时间误差,加上本身跑的是裸机跑的系统,系统函数 调用过程产生的时间差导致函数在ad采集过程中达不到想要的采集效果,双线程同样给存在调度问题,因此双线程(1个产生PWM,1个用来检测引脚高低电平采集)这种方法在调度上和时间上存在误差。

解决方案:

重新开启一个定时器,在PWM开启时同时是开启,在PWM的低电平通过定时器的时间开始采集AD即可。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5123

    浏览量

    213259
  • AD
    AD
    +关注

    关注

    27

    文章

    868

    浏览量

    150115
  • 函数
    +关注

    关注

    3

    文章

    4294

    浏览量

    62347
收藏 人收藏

    评论

    相关推荐

    CAN发送的底层逻辑:CANwrite函数机制介绍

    这个系列是全新的系列,整个系列会通过实际操作,调试实际的代码,以CAN为例,完整的解析AUTOSAR的从底层MCAL 到COM等上层模块的通信链路层。重点讲述数据的流向,以及各个模块的作用,配置方法。
    的头像 发表于 07-17 15:47 5661次阅读
    CAN发送的<b class='flag-5'>底层</b>逻辑:CANwrite<b class='flag-5'>函数</b>机制介绍

    AD10用什么快捷键可以在3D视图中上层底层快速切换啊 ...

    AD10用什么快捷键可以在3D视图中上层底层快速切换啊
    发表于 11-30 16:09

    图片中点击上层可以返回上层目录,上层控件怎么实现?

    图片中点击上层可以返回上层目录,这个上层控件怎么实现?
    发表于 12-20 12:50

    iOS底层函数本质

    iOS 底层(二)-函数本质
    发表于 05-13 07:52

    为什么底层函数里面有7个呢?

    《STM32中文参考手册》P350说到BWTR寄存器只有四个,为什么底层函数里面有7个呢?如下: SRAM/NOR闪存写时序寄存器 1…4 (FSMC_BWTR1…4) 地址偏移:0xA000
    发表于 06-21 04:01

    浅析回调函数

    回调用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这
    发表于 08-06 06:10

    帧中断与字节中断混用的BUG

    帧中断与字节中断混用的玄学BUG
    发表于 08-06 06:55

    arduino的串口底层函数在哪里修改?

    arduino的串口底层函数在哪里修改
    发表于 09-25 06:35

    为什么不能将新旧电池、不同型号电池混用

    为什么不能将新旧电池、不同型号电池混用?         因为旧电池能量低,电量少,而新电池则能量高,电量多,当它们混用时,不但
    发表于 10-28 15:32 6616次阅读

    应用程序调用底层驱动

    本片主要讲述了嵌入式linux操作系统的上层应用程序是如何调用底层驱动程序的。
    发表于 03-14 15:00 0次下载

    03 底层函数

    03 底层函数
    发表于 10-11 09:29 7次下载
    03 <b class='flag-5'>底层</b>库<b class='flag-5'>函数</b>

    驱动之路-设备模型之上层模型

    底层模型决定上层模型,在总线,设备,驱动的结构体中你总是可以看到它们间接或者直接的包含了kobject结构或kset结构。
    发表于 05-15 17:04 620次阅读
    驱动之路-设备模型之<b class='flag-5'>上层</b>模型

    STM32的HAL与LL库能共同使用(混用)吗?

    STM32的HAL和LL库能共同使用(混用)吗?
    的头像 发表于 02-28 16:57 1.4w次阅读

    手机充电器可以混用

    手机的充电器是可以混用的,生产厂家在这一点上面也会考虑到,因为都是USB接口,即使不是有意的,也是很容易出现混用的。虽然手机充电器的标准接口都是USB,但是在混用时,有可能达不到手机原本的充电速度或者是电流。
    发表于 04-04 16:37 2.6w次阅读

    Linux驱动基础知识科普

    驱动就是对底层硬件设备的操作进行封装,并向上层提供函数接口。
    的头像 发表于 05-25 12:35 2523次阅读