完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用STM8L151F2,使用16MHz的内部高速时钟HSI,没有分频;然后对tiM4使用了128分频,填充值为125,我本来想它会1ms中断一次,然后再中断程序中每计数500次(0.5秒)切换一下指示灯。
但在开发板上却发现要增加100倍才达到我想要的效果,对照参考手册翻来覆去都实在找不到问题出在那里,请帮忙看看是哪里搞错了,谢谢! void Init_TIM4(void) { CLK_ICKCR |=0x01; //打开内部高速时钟HSI(16MHz); CLK_SWR =0x01; //系统时钟源使用内部高速时钟HSI;0x01=HSI,0x02=LSI,0x04=HSE,0x08=LSE其余保留 CLK_CKDIVR=0x00; //系统不分频,使之工作在16MHz的频率下(0=1,1=2,2=4,3=8,4=16) CLK_PCKENR1 |= 0x04; //让TIM4链接上系统时钟。 //定时器TIM4的初始化,首先将TIM4相关的寄存器全部复位 TIM4_CR1 = 0x00; //控制寄存器1 TIM4_CR2 = 0x00; //控制寄存器2 TIM4_SMCR = 0x00; //从模式控制寄存器 TIM4_IER = 0x00; //中断使能寄存器 TIM4_CNTR = 0x00; //计数寄存器 TIM4_PSCR = 0x00; //分频值寄存器 TIM4_ARR = 0xFF; //重装填值寄存器,手册上写的复位值是0xFF, TIM4_SR1 = 0x00; //状态寄存器 //对TIM4进行设置 TIM4_PSCR = 0x07; //对系统时钟进行128分频,当前系统使用16MHz,经128分频后得128KHz(8us/触发) TIM4_ARR = 125; //125次触发×8us=1000us=1ms。就是说1ms产生1次中断 TIM4_EGR = 0x01; //TG =0,UG =1; 选择中断类型 TIM4_IER |= 0x01; //打开中断 TIM4_CR1 |= 0x01; //打开定时器; } #pragma vector=TIM4_UIF_vector //TIM4的中断函数 __interrupt void TIM4_UIF(void) { TIM4_count ++; // if(TIM4_count >= 500){ //一开始以为会1ms中断一次,500次中断得500ms,但实际效果是指示灯常亮 if(TIM4_count >= 50000){ //现在改为五万次中断动作1次,才实现0.5秒指示灯动作一次。 PB_ODR ^=0x02; //指示灯的引脚反相,实现开关灯。 TIM4_count =0; } TIM4_SR1 = 0x01; //清除TIM4的中断标志,以防重复进入 } 谢谢! |
|
相关推荐
1个回答
|
|
建议楼主查一下PDF,TIM4和USART1是不是共用了。
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1786 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1622 浏览 1 评论
1089 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
730 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1942浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
739浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
576浏览 3评论
598浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
560浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 15:59 , Processed in 0.813046 second(s), Total 49, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号