OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3253|回复: 2

简单的驱动脉冲,其周期怎么才不会受程序执行时间影响

[复制链接]

32

主题

286

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2014-3-27
在线时间
358 小时
发表于 2016-5-17 14:47:07 | 显示全部楼层 |阅读模式
1金钱
现在用 STM32F103RBT6,控制一个 三路单刀双掷 模拟开关芯片 HEF4053,  芯片驱动程序简单用下面代码表示。
void HEF4053_CTRL(void)
{
        HEF4053_SC_H();//SC高电平
        HEF4053_SA_H();//SA高电平
        HEF4053_SB_L();//SB低电平
        delay_ms(160);//延时160MS

        HEF4053_SA_L();//
        HEF4053_SB_L();//
        HEF4053_SC_L();//
        delay_ms(160);

        //HEF4053_SA_H();//
        HEF4053_SB_H();//
        HEF4053_SA_H();//
        delay_ms(500);//
       
        HEF4053_SC_L();//
        HEF4053_SA_H();//
        HEF4053_SB_L();//
        delay_ms(180);        //       
}

输出波形如下图

HEF4053输出波形

HEF4053输出波形

现在的问题是,主函数中有其它代码数据要处理 ,如果HEF4053_CTRL  放在主函数内,其它程序代码执行后,HEF4053_CTRL周期会改变,输出波形就会发生变化,
而  HEF4053_CTRL 函数因为有delay_ms延时,所以 放在定时器中断内也会导致 程序出现异常。
今天试着用定时器  定时10MS 时间,  对HEF4053_CTRL中的延时函数进行替代,结果输出波形仍然不对。
请各位高手给予帮助,这种类似的固定周期脉冲,怎么实现才不受其它程序影响。难道非要上操作系统吗。

最佳答案

查看完整内容[请看2#楼]

用操作系统最好。 实在不想用操作系统的话,可以状态机的模式来控制这个过程。 如果信号确实是周期的,把它分成时域的n个状态,每当某阶段的延时完成时,它就切换到次态。 需要2个变量,status和counter,每次中断到来时,counter++,当counter大于对应的延时时间了,就清零,并把status更改为次态
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2016-5-17 14:47:08 | 显示全部楼层
用操作系统最好。
实在不想用操作系统的话,可以状态机的模式来控制这个过程。
如果信号确实是周期的,把它分成时域的n个状态,每当某阶段的延时完成时,它就切换到次态。
需要2个变量,status和counter,每次中断到来时,counter++,当counter大于对应的延时时间了,就清零,并把status更改为次态
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2016-5-17 16:24:00 | 显示全部楼层
加个操作系统,160ms的延时用操作系统提供的延时
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 10:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表