OpenEdv-开源电子网

标题: 我用stm8s003f3p6定时器1定时10us进入一次中断,为什么实现不了? [打印本页]

作者: ssssssssssss    时间: 2017-7-4 19:31
标题: 我用stm8s003f3p6定时器1定时10us进入一次中断,为什么实现不了?
       我用stm8s003f3p6定时器1定时10us进入一次中断,为什么实现不了?      我进入中断翻转一次io电平,用示波器看确实20us翻转一次,这是为什么?(采用内部16m晶振)以下是定时器初始化代码

    TIM1->CR1 = 0x00;         //计数器使能,开始计数
    TIM1->IER = 0x01;         //允许更新中断
    TIM1->PSCRH = 0;
    TIM1->PSCRL = 15;          //(15+1)分频为1M
    TIM1->ARRH = 0x0;
    TIM1->ARRL = 0x0A;        //每10us中断一次
    TIM1->CR1 = 0x01;         //计数器使能,开始计数




作者: TCS    时间: 2017-7-7 21:11
是你不是哪里搞错了,有点不对的就是ARRL也是10-1,也就是9

作者: dozm    时间: 2017-7-8 15:53
精度做不到这么高的频率
作者: dozm    时间: 2017-7-8 15:55
试试定时器的PWM+外部晶振 有机会
作者: ssssssssssss    时间: 2017-7-12 10:02
TCS 发表于 2017-7-7 21:11
是你不是哪里搞错了,有点不对的就是ARRL也是10-1,也就是9

这个是弄错了
作者: ssssssssssss    时间: 2017-7-12 10:03
dozm 发表于 2017-7-8 15:53
精度做不到这么高的频率

用寄存器就好了 解决了
作者: ssssssssssss    时间: 2017-7-12 10:03
dozm 发表于 2017-7-8 15:55
试试定时器的PWM+外部晶振 有机会

用寄存器就好了
作者: TCS    时间: 2017-7-13 18:45
嗯嗯,我基本是配置寄存器的,STM8S003只有8K的FLASH,寄存器能写多一点代码
作者: ssssssssssss    时间: 2017-7-17 14:47
TCS 发表于 2017-7-13 18:45
嗯嗯,我基本是配置寄存器的,STM8S003只有8K的FLASH,寄存器能写多一点代码

PointerAttr      库里定义的这个PointerAttr是干嘛的?
作者: liushiming82    时间: 2017-8-4 15:41
建议:stm的8位机,用寄存器,stm32,用库函数
作者: ssssssssssss    时间: 2017-8-4 18:07
liushiming82 发表于 2017-8-4 15:41
建议:stm的8位机,用寄存器,stm32,用库函数

32用寄存器不是更好
作者: liushiming82    时间: 2017-8-4 21:18
因为32位的寄存器太了,查寄存器太麻烦了
作者: dragon7799    时间: 2017-9-10 14:53
20us以上就能行了。mcu反应不过来。
作者: zhanghe111    时间: 2021-8-26 16:37
用PWM吧

作者: funhell    时间: 2021-9-11 15:16
20us以上就能行了。mcu反应不过来。
作者: 操作系统    时间: 2021-9-22 14:51
本帖最后由 操作系统 于 2021-9-22 14:53 编辑

10 微秒一次中断,进入中断,保护现场,恢复现场,弹出堆栈 , 怕就要 5个微秒左右了.你再运行一两条指令,占用2  , 3 个微秒. 其它的程序不要运行了呀.




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4