完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
单片机型号 STM8S105C6t6 . 编译器 IARtiM4做 1ms定时,
void Time4_Init(void) { TIM4_DeInit(); TIM4_TimeBaseInit(TIM4_PRESCALER_64, 250); // 16分频, TIM4_SetCounter(0); TIM4_ARRPreloadConfig(ENABLE); TIM4_PrescalerConfig(TIM4_PRESCALER_64, TIM4_PSCRELOADMODE_IMMEDIATE); TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); //TIM4_Cmd(ENABLE); } void Delay_ms( volatile u16 nTime) { TIM4_Cmd(ENABLE);// 使能Tim4 定时器 TimingDelay = nTime; while(TimingDelay!=0); } 定时器TIM4中断里边递减TimingDelay 实现定时。 TIM1 的通道4 做输入捕获 要来做红外解码的。 void Tim1_InputCapture_Init(void) { TIM1_DeInit(); //初始化时钟16分频 向上计数,计数周期65535 计数初值0 TIM1_TimeBaseInit(15, TIM1_COUNTERMODE_UP, U16_MAX, 0); TIM1_ICInit(TIM1_CHANNEL_4, TIM1_ICPOLARITY_FALLING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00); // 通道4,下降沿捕获 TIM1_ClearFlag(TIM1_FLAG_CC4); TIM1_CCxCmd(TIM1_CHANNEL_4, ENABLE); //使能通道4 TIM1_ITConfig(TIM1_IT_UPDATE, DISABLE); //计数器更新溢出中断使能。 TIM1_Cmd(ENABLE); } 现在的问题是如果我没有调用TIM1的输入捕获 Delay_ms();放到哪里都可以定时,也可以正常进入Tim4中断,。 当我 Tim1_InputCapture_Init(); TIM1_SetCounter(0); while(!TIM1_GetFlagStatus(TIM1_FLAG_CC4)); Delay_ms(1000); //只要 放到输入捕获标志位中断过以后就不能进入TIM4中断了,, TIM1_SetCounter(0); // 我的TIM1的定时器溢出中断和输入捕获中断里边什么也没有放,仿真TIM4的寄存器到了这里的时候也没有发生改变 //实在是弄不懂为什么会发生这样的事情,数据手册也看了好多遍没能查出问题之所在,,,大侠们帮帮忙啊。。。 TIM1_ClearFlag(TIM1_FLAG_CC4); while(!TIM1_GetFlagStatus(TIM1_FLAG_CC4)); BootCodeTime = TIM1_GetCapture4(); TIM1_ClearFlag(TIM1_FLAG_CC4); 上传一个完整的工程文件。
|
|
相关推荐
7个回答
|
|
自己顶贴,,,,没有人帮忙看看嘛??
|
|
|
|
你应该是没有设置中断优先级
|
|
|
|
你们用的什么语言写的程序,为什么和我的不一样的格式呢,我用的是C语言。
#include "allveriable.h" unsigned int i=0; void TIM1_Init(void) { TIM1_CR1 = 0x00; //向上的计数方向,中断计数不停 TIM1_IER = 0x01; //允许更新中断 TIM1_PSCRH = 0x3e; //进行16000分频 ?? //时钟为16M TIM1_PSCRL = 0x80; /*分频器的值 为65535 我们取16000 16000000/16000=1000 CK=1000; 要求为1S产生一次中断, 值达到1000; */ //TIM1_PSCRH = 0x07; //8000 值越大,速度越小。 // TIM1_PSCRL = 0xd0; TIM1_ARRH = 0x03; //?? 1000的16进制 为03e8 TIM1_ARRL = 0xe8; TIM1_CR1 |=0x01; //使能计数器 } unsigned int num,k=0; unsigned int count[2]={0x05,0x06}; unsigned int NUM[2]; unsigned int Value=0; /* main() { _asm("sim"); CLK_Init(); GPIO_Init(); TIM1_Init(); _asm("rim"); while (1); } */ @far @Interrupt void TIM1_OVER_Int(void) { TIM1_SR1 = 0x00; //中断标志位清零 // Dis_595(i); i++; } |
|
|
|
楼主好人啊 最喜欢楼主这种人了 资料收下了 一定会受益匪浅的
|
|
|
|
|
|
|
|
学习学习
|
|
|
|
学习学习
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
54 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
395 浏览 0 评论
439 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1265 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
529 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11743 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 11:30 , Processed in 0.624933 second(s), Total 57, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号