原创
【不用开发板学习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条评论)
登录后参与讨论