TA的每日心情 | 开心 2024-8-5 17:13 |
---|
签到天数: 333 天 连续签到: 1 天 [LV.8]以坛为家I
|
今天抽空测试了一下定时器,看定时器的时候我们先来看看mm32的时钟树
可以通过数据手册看到,TIM1的最大时钟是60M,在硬件处理上芯片没有设计外部时钟,所以可以判定芯片使用的是内部时钟,我们这里就不做修改了。
在说定时器程序的时候,我们来看看点灯的电路设计。
这里的4.7K的电阻着实没有看清楚是啥用意……拍视屏的时候就比较恼火,这个灯到底是亮了呢还是没亮,从考虑到节能的方向么?
然后我们开始今天的代码分享吧,主函数是这个开始,主函数很简单。
- #include "Delay.h"
- #include "DRV_TIM.h"
- int main(void)
- {
- InitDelay();
- LED_Init();
- TIM1_Init( );
- while(1)
- {
-
- }
- }
复制代码 然后就是定时器的代码了,我们设定为1ms 中断一次,1s改变一次灯的状态
- #include "DRV_TIM.h"
- unsigned TimeCount=0;
- void TIM1_Init(void)
- {
- NVIC_InitTypeDef NVIC_InitStruct;
- RCC_ClocksTypeDef RCC_Clocks;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
- RCC_GetClocksFreq(&RCC_Clocks);//--获取当前时钟--
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM1, ENABLE);
- TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct);
- TIM_TimeBaseInitStruct.TIM_Prescaler = (60);//--设置分频--
- TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInitStruct.TIM_Period = (1000 - 1);
- TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_Div1;
- TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
- TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);
- TIM_ClearFlag(TIM1, TIM_FLAG_Update);
- TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
- NVIC_InitStruct.NVIC_IRQChannel = TIM1_BRK_UP_TRG_COM_IRQn;
- NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01;
- NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStruct);
- TIM_Cmd(TIM1, ENABLE);
- }
- void TIM1_BRK_UP_TRG_COM_IRQHandler(void)
- {
- if (SET == TIM_GetITStatus(TIM1, TIM_IT_Update))
- {
-
- TimeCount++;
- if(TimeCount==1000)
- {
- TimeCount=0;
- GPIO_IO_Toggle(GPIOB,GPIO_Pin_9);
- }
- TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
- }
- }
复制代码
然后,视频就不发了,因为闪灯结果都一样,大家可以下载代码试试看。
代码如下:
MM32SPIN 0230_Demo.rar
(373.4 KB, 下载次数: 0)
|
|