




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统原理及应用
项目化教程项目3
数码管控制设计与实现学习目标1.掌握STM32的时钟系统;2.掌握STM32位带操作;3.掌握SysTick定时器实现精确延时;4.了解数码管的结构、工作原理和显示方式;5.掌握数码管静态和动态显示设计。目录3.1STM32的时钟系统3.2STM32位带操作3.3任务4使用位操作点亮流水灯3.4SysTick定时器3.5任务5数码管显示控制3.1STM32的时钟系统STM32时钟树3.1STM32的时钟系统STM32时钟树3.1STM32的时钟系统1.STM32有5个时钟源:HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时
钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。WDG
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。
倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
2.系统时钟SYSCLK可来源于三个时钟源:
①、HSI振荡器时钟
②、HSE振荡器时钟
③、PLL时钟3.STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL
输出的2分频、HSI、HSE、或者系统时钟。4.任何一个外设在使用之前,必须首先使能其相应的时钟。3.1STM32的时钟系统RCC相关配置寄存器typedefstruct{__IOuint32_tCR;//HSI,HSE,CSS,PLL等的使能和就绪标志位__IOuint32_tCFGR;//PLL等的时钟源选择,分频系数设定__IOuint32_tCIR;//
清除/使能时钟就绪中断__IOuint32_tAPB2RSTR;//APB2线上外设复位寄存器__IOuint32_tAPB1RSTR;//APB1线上外设复位寄存器__IOuint32_tAHBENR;//DMA,SDIO等时钟使能__IOuint32_tAPB2ENR;//APB2线上外设时钟使能__IOuint32_tAPB1ENR;//APB1线上外设时钟使能__IOuint32_tBDCR;//备份域控制寄存器__IOuint32_tCSR;//控制状态寄存器}RCC_TypeDef;3.1STM32的时钟系统RCC相关头文件和固件库源文件头文件:stm32f10x_rcc.h源文件:stm32f10x_rcc.c时钟使能配置:
RCC_LSEConfig()、RCC_HSEConfig()、
RCC_HSICmd()、RCC_LSICmd()、RCC_PLLCmd()……时钟源相关配置:
RCC_PLLConfig
()、
RCC_SYSCLKConfig()、
RCC_RTCCLKConfig()…分频系数选择配置:
RCC_HCLKConfig()、RCC_PCLK1Config()、RCC_PCLK2Config()…外设时钟使能:RCC_APB1PeriphClockCmd()://APB1线上外设时钟使能
RCC_APB2PeriphClockCmd();//APB2线上外设时钟使能
RCC_AHBPeriphClockCmd();//AHB线上外设时钟使能5.其他外设时钟配置:
RCC_ADCCLKConfig();RCC_RTCCLKConfig();状态参数获取参数:
RCC_GetClocksFreq();
RCC_GetSYSCLKSource();
RCC_GetFlagStatus()RCC中断相关函数:
RCC_ITConfig()、
RCC_GetITStatus()、
RCC_ClearITPendingBit()…3.2STM32位带操作位操作原理
把每个比特膨胀为一个32位的字,当访问这些字的时候就达到了访问比特的目的,比如说BSRR寄存器有32个位,那么可以映射到32个地址上,我们去访问(读-改-写)这32个地址就达到访问32个比特的目的。3.2STM32位带操作哪些区域支持位操作:其中一个是SRAM区的最低1MB范围,0x20000000‐0x200FFFFF(SRAM区中的最低1MB)第二个则是片内外设区的最低1MB范围,
0x40000000‐0x400FFFFF(片上外设区中最低1MB)3.2STM32位带操作3.2STM32位带操作3.2STM32位带操作位带操作优越性3.3任务4使用位操作点亮流水灯system.h里面对GPIO输入输出部分功能实现了位带操作:#defineBITBAND(addr,bitnum)((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))#defineMEM_ADDR(addr)*((volatileunsignedlong*)(addr))#defineBIT_ADDR(addr,bitnum)MEM_ADDR(BITBAND(addr,bitnum))//IO口地址映射#defineGPIOA_ODR_Addr(GPIOA_BASE+12)//0x4001080C#defineGPIOB_ODR_Addr(GPIOB_BASE+12)//0x40010C0C#defineGPIOF_ODR_Addr(GPIOF_BASE+12)//0x40011A0C#defineGPIOG_ODR_Addr(GPIOG_BASE+12)//0x40011E0C#defineGPIOA_IDR_Addr(GPIOA_BASE+8)//0x40010808#defineGPIOB_IDR_Addr(GPIOB_BASE+8)//0x40010C08#defineGPIOG_IDR_Addr(GPIOG_BASE+8)//0x40011E08//IO口操作,只对单一的IO口!//确保n的值小于16!#definePAout(n)BIT_ADDR(GPIOA_ODR_Addr,n)//输出#definePAin(n)BIT_ADDR(GPIOA_IDR_Addr,n)//输入#definePBout(n)BIT_ADDR(GPIOB_ODR_Addr,n)//输出#definePBin(n)BIT_ADDR(GPIOB_IDR_Addr,n)//输入…#definePFout(n)BIT_ADDR(GPIOF_ODR_Addr,n)//输出#definePFin(n)BIT_ADDR(GPIOF_IDR_Addr,n)//输入#definePGout(n)BIT_ADDR(GPIOG_ODR_Addr,n)//输出#definePGin(n)BIT_ADDR(GPIOG_IDR_Addr,n)//输入3.3任务4使用位操作点亮流水灯PB0LED闪烁#defineled0PBout(0)//PB0引脚连接LED0#defineled1PBout(1)//PB1引脚连接LED1#defineled2PCout(2)//PB2引脚连接LED2#defineled3PCout(3)//PB3引脚连接LED3#include"system.h"#include"led.h"voiddelay(u32i){while(i--);}intmain(){LED_Init();while(1){led0=!led0;delay(6000000);}}3.3任务4使用位操作点亮流水灯LED流水灯led0=1;led1=0;led2=1;led3=1;delay(6000000);led0=1;led1=1;led2=0;led3=1;delay(6000000);led0=1;led1=1;led2=1;led3=0;delay(6000000);}}#include"system.h"#include"led.h"voiddelay(u32i){while(i--);}intmain(){LED_Init();while(1){led0=0;led1=1;led2=1;led3=1;delay(6000000);3.3任务4使用位操作点亮流水灯测试效果3.4SysTick定时器Systick定时器是什么?Systick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有Systick定时器。Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。比如UCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做UCOS心跳时钟。3.4SysTick定时器Systick定时器就是系统滴答定时器,一个24
位的倒计数定时器,计到0
时,将从RELOAD
寄存器中自动重装载定时初值。只要不把它在SysTick
控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。Systick中断的优先级也可以设置。3.4SysTick定时器Systick相关寄存器SysTick
控制和状态寄存器-CTRL
对于STM32,外部时钟源是HCLK(AHB总线时钟)的1/8
内核时钟是HCLK时钟
配置函数:SysTick_CLKSourceConfig();3.4SysTick定时器Systick相关寄存器SysTick
重装载数值寄存器-LOADSysTick
当前值寄存器-VAL3.4SysTick定时器Systick库函数
固件库中的Systick相关函数:SysTick_CLKSourceConfig()//Systick时钟源选择misc.c文件中SysTick_Config(uint32_tticks)//初始化systick,时钟为HCLK,并开启中断
//core_cm3.h/core_cm4.h文件中Systick中断服务函数:voidSysTick_Handler(void);3.4SysTick定时器Systick库函数
SysTick_CLKSourceConfig函数:voidSysTick_CLKSourceConfig(uint32_tSysTick_CLKSource){/*Checktheparameters*/assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));if(SysTick_CLKSource==SysTick_CLKSource_HCLK){SysTick->CTRL|=SysTick_CLKSource_HCLK;}else{SysTick->CTRL&=SysTick_CLKSource_HCLK_Div8;}}3.4SysTick定时器Systick库函数
SysTick_CLKSourceConfig函数:static__INLINEuint32_tSysTick_Config(uint32_tticks){if(ticks>SysTick_LOAD_RELOAD_Msk)return(1);/*Reloadvalueimpossible*/
/*setreloadregister*/SysTick->LOAD=(ticks&SysTick_LOAD_RELOAD_Msk)-1;/*setPriorityforCortex-M0SystemInterrupts*/NVIC_SetPriority(SysTick_IRQn,(1<<__NVIC_PRIO_BITS)-1);SysTick->VAL=0;/*LoadtheSysTickCounterValue*/SysTick->CTRL=SysTick_CTRL_CLKSOURCE_Msk|SysTick_CTRL_TICKINT_Msk|SysTick_CTRL_ENABLE_Msk;/*EnableSysTickIRQandSysTickTimer*/return(0);/*Functionsuccessful*/}3.4SysTick定时器delay延时static__IOuint32_tTimingDelay;voidDelay(__IOuint32_tnTime){TimingDelay=nTime;while(TimingDelay!=0);}voidSysTick_Handler(void){if(TimingDelay!=0x00){TimingDelay--;}}intmain(void){…if(SysTick_Config(SystemCoreClock/1000))//systick时钟为HCLK,中断时间间隔1ms{while(1);}while(1){Delay(200);//2ms…}}用中断的方式实现delay延时3.4SysTick定时器使用SysTick定时器实现流水灯#include"system.h"#include"SysTick.h"#include"led.h"intmain(){SysTick_Init(72);LED_Init();while(1){led1=0;led2=1;delay_ms(500);//精确延时500msled1=1;led2=0;delay_ms(500);}}3.5任务5数码管显示控制LED数码管内部引脚图3.5任务5数码管显示控制8段LED段码显示字符共阴极段码共阳极段码显示字符共阴极段码共阳极段码03FHC0HC39HC6H106HF9Hd5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HH76H89H56DH92HL38HC7H67DH82Hn37HC8H707HF8Ho5CHA3H87FH80HP73H8CH96FH90HU3EHC1HA77H88H灭00HFFHb7CH83H
3.5任务5数码管显示控制N位LED数码管结构3.5任务5数码管显示控制4位LED动态显示电路3.5任务5数码管显示控制数码管模块电路图3.5任务5数码管显示控制初始化数码管IOvoidSMG_Init(){GPIO_InitTypeDefGPIO_InitStructure;//声明一个结构体变量,用来初始化GPIORCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//开启GPIO时钟/*配置GPIO的模式和IO口*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;//选择要设置的IO口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);/*初始化GPIO*/}3.5任务5数码管显示控制静态显示核心代码#include"system.h"#include"SysTick.h"#include"led.h"#include"smg.h"u8smgduan[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0~F数码管段选数据intmain(){u8i=0;SysTick_In
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 服务对象初级社会工作者试题及答案
- 底商租房合同协议书模板
- 绿色电力试题及答案
- 系统分析师职业发展的关键要素试题及答案
- 机械公司技术管理制度
- 加油卡公司管理制度
- 如何管理系统集成项目中的技术难题试题及答案
- 乙类感冒管理制度
- 文明施工喷漆管理制度
- 管理方式与管理制度
- GB 36894-2018危险化学品生产装置和储存设施风险基准
- 自动送料机控制系统设计毕业论文
- 管理处干部职工廉洁从业行为规范
- 《管理会计在企业应用中问题及对策研究-以美的公司为例(论文)6800字》
- GB-T 1040.3-2006 塑料 拉伸性能的测定 第3部分:薄塑和薄片的试验条件
- 《数学广角找次品》公开课一等奖省优质课大赛获奖课件
- 企业负责人安全管理人员安全能力提升培训之一课件
- 蓝色高效会议管理技巧PPT模板
- 地下水动力学PDF(课堂PPT)
- 国学志愿者申报表
- 用“利用系数”法计算LED路灯的照度及配置
评论
0/150
提交评论