我们的需求是stm8做从机,然后使用一根线接收方波,来实现不同的功能,比如亮红灯,亮黄灯,打开蜂鸣器等等等等。
那么问题来了,之前我尝试着通过一次发送多少个方波来实现不同的功能,但是到最后我发现这个方法行不通。后来我想了一下可以通过主机发过来的方波频率来实现不同的功能,即知道每次发过来的方波的周期。
那么如何计算方波周期呢?这里感谢我的同事给了我思路,可以实现这个功能。
首先是要做gpio的外部中断,这里以gpio PD4在主函数里进行设置,当有下降沿的时候就会进入中断处理函数:
GPIO_Init(GPIOD,GPIO_PIN_4, GPIO_MODE_IN_FL_IT );//接收方波初始化
EXTI_DeInit();
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD , EXTI_SENSITIVITY_FALL_ONLY);
定时器timer2在主函数的配置如下:
//内部时钟为16M,因此这个设置时以10ms进入一次中断
TIM2_DeInit();
TIM2_TimeBaseInit(TIM2_PRESCALER_16, 9999);
TIM2_PrescalerConfig(TIM2_PRESCALER_16, TIM2_PSCRELOADMODE_UPDATE);
TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);
TIM2_SetCounter(0x0000);
TIM2_Cmd(ENABLE);
TIM2_ClearFlag(TIM2_FLAG_UPDATE);
TIM2_ITConfig( TIM2_IT_UPDATE, ENABLE);
TIM2_Cmd(ENABLE);
在gpio的外部中断函数里,这样设置:
INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
//GPIO_WriteReverse(GPIOD,GPIO_PIN_3);
flag ^= 0x01;
if(flag == 0)
test_time = 0;
else{
tmp_count = test_time;
}
}
在timer2的外部中断处理函数里,这样设置:
INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
TIM2_ClearFlag( TIM2_FLAG_UPDATE);//记得要清除标志位,否则会出问题
test_time++;
}
这样一来当flag为0的时候就会清零,为1的时候就会将数据传出去,也就是等于知道一个周期的时间。
存在问题:这样的写法虽然可以解决问题,但是在程序刚开始的时候还是会出现问题,因为可能定时器先走了,主函数比定时器慢,一开始可能会丢,不过后面就很稳定了。
上一篇:STM8S003F3 内部时钟初始化以及定时器做延时的使用
下一篇:STM8学习笔记---Modbus通信协议简单移植
推荐阅读
史海拾趣
随着市场的竞争加剧,ECI意识到只有不断创新才能在行业中立足。在总经理张女士的领导下,公司投入大量资源进行研发,成功推出了一系列具有竞争力的新产品。其中,一款集成了先进算法的智能传感器,因其高精度和低功耗特性,在市场上大受欢迎。这一创新不仅提升了ECI的品牌形象,也为公司带来了丰厚的利润。
随着全球环保意识的不断提高,C-TECH Co., Ltd积极响应环保号召,将环保理念融入公司的发展之中。公司在2007年就通过了ISO 14001环境管理体系认证,并在生产过程中采用环保材料和工艺,减少废弃物排放和能源消耗。此外,公司还积极参与环保公益活动,推动行业绿色发展。通过践行环保理念,C-TECH Co., Ltd在电子行业树立了良好的企业形象。
在智能制造领域,中电熊猫也取得了显著进展。2010年,中电熊猫开始研发液晶面板工厂的智能运储系统,打破了以往依赖国外供应商的局面。到了2011年,中电熊猫成功完成了国内首条高世代液晶面板智能运储系统的研发,并逐渐成为国内该系统的主要供应商。此外,中电熊猫还在液晶玻璃生产线系统等方面实现了国产化研发,提升了整体产业的竞争力。
在发展过程中,格瑞宝始终秉持开放合作的理念,积极寻求与行业内外的合作伙伴建立长期稳定的合作关系。例如,公司与唯样商城等元器件线上平台达成战略合作,成为其代理商之一。这一合作不仅进一步扩充了格瑞宝的产品线,也为广大客户提供了更多的产品选择和服务支持。通过合作与共赢的模式,格瑞宝不断拓宽业务边界,提升市场竞争力,实现了更快速的发展。
DFI公司自创立之初,就致力于技术创新。在电子主板领域,DFI凭借其对高性能主板的深入研究,成功开发出多款领先行业的产品。例如,在2002年,DFI推出了LanParty UT nF4 SLI-DR Venus限量版主板,这款产品凭借其出色的性能和稳定性,迅速赢得了全球玩家的青睐。这一系列的创新举措不仅提升了DFI的品牌知名度,也为其在电子主板市场占据了重要地位。
为了满足不断增长的市场需求,1928年,Belden在印第安纳州里士满开设了一家专为制造电线而设计的新工厂。这家工厂的建立极大地提升了公司的产能和效率,为公司的进一步发展提供了有力保障。在随后的几十年里,随着第二次世界大战的爆发和战后经济的复苏,里士满工厂经历了多次扩建和升级,逐渐成为百通最大的制造工厂之一。
我最近在写一个与驱动程序通讯的应用程序,比如在菜单下有“读”的控件,那么如何实现与驱动程序中的READ协调,也就是说我,我按菜单下的“读”时,驱动程序中就执行“读”的函数??… 查看全部问答∨ |
我现在想学习嵌入式开发,不知道该从何处着手,请大家指点迷津 我的C语言和汇编都有一定基础。 现在该学习那些方面,希望大家推荐一些好的书籍, 谢谢大家了… 查看全部问答∨ |
我在网上关注很长时间了,最后从价格上NET-008最实用。大家不妨借鉴一下他的长处。下面是他的介绍: 这是一款在我们的net-008的产品基础上扩展而成的智能家居控制系统,系统成本不足1000,和市面上动不动就成千上万的智能家居系统比起来可算是 ...… 查看全部问答∨ |
|
我使用STM32 CPU,在一个USB端口上可以分别实现虚拟串口和移动硬盘的功能。 请问可以合并2个功能到一起吗,即插上USB线之后,主机同时发现一个虚拟串口和一个移动硬盘。 谢谢!… 查看全部问答∨ |