完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
相关推荐
1个回答
|
|
|
提示:以下是本篇文章正文内容,下面案例可供参考
一、定时器功能配置? 1.定时器初始化函数time2_Init(void) void time2_Init(void) //定时器2初始化 { _stm2c0=0; //计数频率为8MHz/4=2MHz 即计数一次为0.5us _stm2c1=0b11000001; //定时器2功能选择寄存器,选择为定时/计数器模式 _stm2al=0x20; //初值为20000,计数时间为10ms _stm2ah=0x4e; _stm2ae=1; //STM2 比较器 A 匹配中断控制位使能 _st2on=1; //开启定时器 _mf4e=1; //多功能中断使能 _emi=1; //开启总中断 } 我们先来一句一句的分析代码,第一和第二条语句涉及到定时器部分两个最重要的寄存器。
2.中断函数配置DEFINE_ISR(time2,0x38) _emi=0; //关闭总中断 time2_count++; if(time2_count==100) { time2_count=0; LED1=!LED1; //LED1状态取反 } _stm2af=0; //清除定时器中断标志位 _emi=1; //开启总中断 time2_count这个变量我一开始在程序的开头定义了,并在头文件那里声明用extern声明为全局变量。进入一次中断time2_count就+1,10ms进入一次,到100就是1秒,然后再清零,LED1再取反。 二、主函数main 主函数没有什么东西,就是一些函数的初始化,和关闭看门狗而已 #include "HT66F2390.h" #include "delay.h" #include "uart.h" #include "LED.h" #include "time.h" void main() { int t=0; //用于计时 LED_Init(); //LED初始化 time2_Init(); //定时器2初始化 _wdtc=0b10101011; //关闭看门狗 while(1) { delay_ms(10); t++; if(t==100) { t=0; LED2=!LED2; //系统状态指示灯 } } } |
|
|
|
|
只有小组成员才能发言,加入小组>>
1599 浏览 0 评论
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
4738 浏览 0 评论
4229 浏览 9 评论
3822 浏览 16 评论
4398 浏览 1 评论
4211浏览 3评论
2380浏览 0评论
3394浏览 0评论
1158浏览 0评论
2843浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 05:51 , Processed in 0.653615 second(s), Total 74, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1853