历史上的今天
今天是:2024年09月15日(星期日)
2021年09月15日 | STM8S003F3 使用定时器来计算方波周期的方法
2021-09-15 来源:eefocus
我们的需求是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的时候就会将数据传出去,也就是等于知道一个周期的时间。
存在问题:这样的写法虽然可以解决问题,但是在程序刚开始的时候还是会出现问题,因为可能定时器先走了,主函数比定时器慢,一开始可能会丢,不过后面就很稳定了。
史海拾趣
|
新手提问,请勿取笑,呵呵。 S3C2410在管脚复用的时候有这样一段代码: //set GPG1 as EINT9 for CS8900A value = INREG32(&pOalPortRegs->GPGCON); OUTREG32(&pOalPortRegs->GPGCON,(value & ~(3… 查看全部问答> |
|
产品最初正常工作,内核和应用程序都好的。过了一段时间后启动异常。 步骤是开机Bootloader启动,启动时加载了LOGO界面填充了液晶的显示缓冲区,后来就停在这里了。 我可以按照原来的方式烧内核,更换了画面也可以显示。 重烧了BOOTLOADER后也没 ...… 查看全部问答> |
|
在应用程序里如何查询某个USB连在哪一个USB controller上 在具有多个USB controller和多个USB设备的情况下, 如何查询这些USB设备连接在哪个USB controller上。 设备管理器中,如果选择“依连接排序设备”,就可以看到所 有设备的Device Tree,VC里有什么API或者什么方法可以获得 类似的信息吗? 请高 ...… 查看全部问答> |
|
看看有没有问题,第一次玩STM32,没有什么经验,硬件是按照st-link制作的,做了一些修改(st-link本来也是一块开发板)。准备自己做JTAG下载工具或者调试工具,呵呵,如果搞的定的话。PCB还没铺地,其他都OK了。发现一个错误,应该BOOT1接地,BO ...… 查看全部问答> |
|
μC/OS-II实时性能测试指标 衡量嵌入式实时操作系统的好坏一般主要参考以下主要性能指标参数: 任务切换时间、中断响应时间、任务响应时间、任务创建/删除时间、交替信号量时间、取得/释放信号量时间、交替消息队列传输时间等。本文仅对前2个 ...… 查看全部问答> |




