TA的每日心情 | 开心 2024-8-5 17:13 |
---|
签到天数: 333 天 连续签到: 1 天 [LV.8]以坛为家I
|
本帖最后由 xiaoshen-372360 于 2018-7-25 22:42 编辑
先移植原子个的代码测试,熟悉定时器操作,然后自己在写一遍
1:首先建立TIM.c和TIM.h文件,并添加与UserCode栏。
2:在.c文件中加入如下代码
- #include "TIM.h"
- int count=0;
- void TIM_X_Init(void)
- {
- gpt_config_t gpt1_onfig;
- GPT_GetDefaultConfig(&gpt1_onfig); //先初始化GPT1为默认值
- gpt1_onfig.clockSource=kGPT_ClockSource_Periph; //初始化时钟源perclk_clk_root
- gpt1_onfig.divider=3750-1; //设置分频值
- GPT_Init(GPT1,&gpt1_onfig);
- //
- GPT_SetOutputCompareValue(GPT1,kGPT_OutputCompare_Channel1,5000); //设置比较计数值
- GPT_EnableInterrupts(GPT1,kGPT_OutputCompare1InterruptEnable); //使能GPT比较通道1中断
- // RT1052_NVIC_SetPriority(GPT1_IRQn,5,0); //抢占优先级5,子优先级0
- NVIC_SetPriority(GPT1_IRQn,1);
- EnableIRQ(GPT1_IRQn); //使能GPT1中断
- GPT_StartTimer(GPT1); //开始定时器
- }
- //GPT1中断服务函数
- void GPT1_IRQHandler(void)
- {
- //OCR1中断
- if(GPT_GetStatusFlags(GPT1,kGPT_OutputCompare1Flag))
- {
- if(count++%2==0)
- {
- LED0(0); //DS0亮
- }
- else
- {
- LED0(1); //DS0亮
- }
- GPT_ClearStatusFlags(GPT1,kGPT_OutputCompare1Flag);//清除中断标志位
- }
- // __DSB(); //数据同步屏蔽指令
- }
复制代码 3:在.h文件中加入如下代码
- #ifndef TIM_H
- #define TIM_H
- #include "SystemIncludes.h"
- #define LED0(n) (n?GPIO_PinWrite(GPIO1,3,1):GPIO_PinWrite(GPIO1,3,0))
- #define LED0_Toggle (GPIO1->DR ^= (1<<3)) //LED0输出电平翻转
- #define LED1(n) (n?GPIO_PinWrite(GPIO3,3,1):GPIO_PinWrite(GPIO3,3,0))
- #define LED1_Toggle (GPIO3->DR ^= (1<<3)) //LED1输出电平翻转
- void TIM_X_Init(void);
- #endif
复制代码
这样一来定时器的驱动就已经移植成功了,结合原有的LED程序,
DS0呈现闪烁的现象,初试定时器完成
定时器代码:
RT1052-Demo-TIM.rar
(910.67 KB, 下载次数: 3)
|
|