原创
【不用开发板学习STM32】7段数码管0~9定时显示(文末获取代码及工程文件)
本实验是通过7个IO口控制一个共阳7段数码管,分别从0~9依次显示。时间间隔200ms刷新一次。系统时钟源是内部8MHz晶振,具体原因上一期已经讲述过了,时钟倍频位40MHz,使用了TIM2定时器,数码管刷新在TIM2中断函数中完成。同时利用systick来计时,控制一个LED灯间歇闪烁。工程师如果对STM32F10x系列怎么使用内部时钟有疑问可以参考这里的代码,都是在实际开发板上测试过,和用Proteus仿真结果是一致的。TIM2初始化,这里设置是200ms进一次中断,系统时钟是40MHz,并且配置好TIM2的中断,代码如下:
- void bsp_InitTIM2(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- uint32_t usPeriod;
- /* 开启TIM2的时钟 */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
- usPeriod = 2000; //重装载数值 200ms
- /* Time base configuration */
- TIM_TimeBaseStructure.TIM_Period = usPeriod;
- TIM_TimeBaseStructure.TIM_Prescaler = 3999; //设置分频系数
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
- //开启TIM2中断
- TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );
- /* TIMx enable */
- TIM_Cmd(TIM2, ENABLE);
- {
- /* 配置定时器中断 */
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
- }
代码及工程下载链接!!https://t.1yb.co/axri
作者: Jack陈, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-1468086.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论