07 蓝桥杯竞赛LCD例程07 STM32 LCD例程讲解_第1页
07 蓝桥杯竞赛LCD例程07 STM32 LCD例程讲解_第2页
07 蓝桥杯竞赛LCD例程07 STM32 LCD例程讲解_第3页
07 蓝桥杯竞赛LCD例程07 STM32 LCD例程讲解_第4页
07 蓝桥杯竞赛LCD例程07 STM32 LCD例程讲解_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、7蓝桥杯比赛LCD例行程序一、基本学习程序:1 .配置systick中断:设置中断、systick、中断组和优先级。2 .分析代码,精通LCD相关函数和使用方法。3 .用实物观察现象。7 LCD_SYSTICK7.1配置systick中断7.1.1中断Cortex内核具有强大的异常响应系统,它将能够中断当前代码执行进程的事件分为异常(exception )和中断(interrupt ),用一个表来管理,被称为编号为0 15的内核异常。 在CPU内部发生的中断被称为异常。CPU外部的芯片上外围设备发生的中断被称为中断的用户自己写的程序,自己指定位置调用,称为函数调用。启动文件startup_st

2、m32f10x_hd.s具有相应芯片中可用的所有中断,并且在创建中断服务函数时,必须从启动文件中定义的中断矢量图中搜索中断服务函数名称。第6276行是内部异常,第76行是systick中断名,第78行以后是芯片上外围的中断服务函数名。因为STM32的中断这么多,不容易配置,所以需要强大方便的中断控制器nvic (nestedvectoredinterruptcontroller )。 NVIC是属于Cortex内核的设备,会处理所有不可屏蔽中断(NMI )和外部中断,但SYSTICK不由NVIC控制。中断优先级:STM32的中断向量有优先权属性和响应属性两个属性,属性编号越小表示优先级越高。

3、抢占是指能中断其他中断的属性. 也就是说,具有此属性会发生嵌套中断(在执行中断服务函数a的过程中,中断b会中断,在中断服务函数b的执行完成后,中断服务函数a会继续执行)。 抢占属性由nvic _ irqchannelpreemptionpriority中的参数设置。 另一方面,响应属性适用于相同的优先权属性,两个中断向量的优先权优先级相同,两个中断同时到达时,会先处理响应优先级高的中断,响应属性由NVIC_IRQChannelSubPriority参数构成。 例如,请参见表。如果内核正在运行c的中断服务函数,可以用优先级高的中断a中断。 因为b和c的优先权优先级相同,c不能用b中断。 但是,如

4、果b和c的中断同时到达,内核首先对高优先级的b的中断进行响应。中断组:NVIC只能设置16种中断矢量的优先级。 也就是说,优先权优先顺序和响应优先顺序的数量由1位数字决定,将该4位数字的位数分配给优先权优先顺序和响应优先顺序。 有五种分配方法群组编号意思限制优先权的范围响应优先级的范围00位优先权、4位响应优先权没有0到151优先权第1位、应答优先级第3位0 10到72优先权第2位、应答优先级第2位0到30到33优先权第3位、应答优先级第1位0到70 14优先级4比特、响应优先级0比特0到15没有可以在库函数NVIC_PriorityGroupConfig ()中输入的参数是nvic _ pr

5、iority group _ 0到nvic _ priority group _ 4STM32F10x固件库中文解释 :基于单片机技术实战STC51和STM32STM32相关资料例如,nvic _ priritygroupconfig (nvic _ priority group _2)7.1.2 SYSTICK时钟SysTick计时器与NVIC捆绑在一起,用于发生SysTick异常(异常编号: 15 )。 以往,操作系统和使用定时的所有系统,作为系统整体的定时,都必须具有产生必要的“咔嗒”中断的硬件计时器。 喀嚓喀嚓地中断对操作系统特别重要。 例如,操作系统可以向多个任务分配不同数量的时间片

6、,并为操作系统提供各种类型的时间线,例如确保没有可以占用系统的任务,或者给特定的任务提供每一个定时器周期的时间范围,等等因此,期望需要产生定期中断的计时器,以使用户程序不能随意访问该寄存器,来维持os的“心跳”的节奏。Cortex-M3在内核部分包含简单的计时器SysTick。 所有的CM3芯片都配备了这个计时器,使软件在不同芯片制造商的CM3设备之间的移植变得简单。 该计时器的时钟源可以是内部时钟(FCLK,CM3上的空闲时钟),也可以是外部时钟(CM3处理器上的STCLK信号)。 然而,因为STCLK的具体源由芯片设计者决定,所以产品之间的时钟频率可能有很大差异。 因此,有必要阅读芯片的使

7、用说明书,决定选择什么作为时钟源。 在STM32中,SysTick将HCLK(AHB时钟)或HCLK/8作为工作时钟,请参照下图。SysTick计时器可以引起中断,CM3开发了一种特别异常的类型,在向量表中有它的座位。 由于所有CM3产品之间SysTick的处理方式相同,因此os和其他系统软件在CM3设备之间的移植变得简单了。 SysTick计时器除了用于操作系统之外,还可用于报警或测量时间。 Systick计时器是Cortex内核部件,在芯片上周围的固件库中找不到相关函数,即不在STM32F10x固件库中文解释文件中。SysTick是24位计时器,能够一次计数最多224个时钟脉冲,该脉冲计数

8、值存储在当前计数值寄存器STK _ val (systickcurrentvalueregister )中,并进行向下计数当STK_VAL的值减小为0时,利用硬件,重负载寄存器STK _ load (systickreloadvalueregister )中存储的数据被自动加载到STK_VAL中,再次进行下载计数。 如果STK_VAL的值计数为0,则会触发异常,从而允许中断服务函数(SysTick_Handler )处理计时事件。函数名称从启动文件中的中断向量列表中获取7.1.3 systick中断配置全局变量u32 TimingDelay :用于主文件和中断文件。在systick的定时中断中

9、,达到定时要求时实现负1操作。 进入SysTick_Config(uint32_t ticks )函数,可以确定放置SysTick计时器的时间。 以下参数分别表示不同的计时时间。/SystemCoreClock/1000 1ms中断,即每隔1ms进入SysTick_Handler ()/SystemCoreClock/100000 10us中断时,每10us进入SysTick_Handler ()/SystemCoreClock/1000000 1us中断时,每1us进入SysTick_Handler ()函数NVIC_SetPriority ()设置中断的“抢占”优先级。 默认值是最低的。

10、在功能复杂方面的工序中,systick优先级通常高于外部中断,且低于其他计时器。 因此,更改代码NVIC_SetPriority (SysTick_IRQn,(1_NVIC_PRIO_BITS) - 1 )更改为NVIC_SetPriority (SysTick_IRQn,1 )复制到主文件中。 无法修改内核文件。 将SysTick_Config ()函数复制到main.c,将其更改为名为SysTick_Config1(),然后添加函数声明。还设置中断组nvic _ priritygroupconfig (nvic _ priority group _2)要配置中断分组方法,请执行以下操作:调

11、用该函数,代入上述参数即可。 变更后如下所示。main ()函数调用sy stick _ config1(systemcoreclock/1000 )函数,在程序执行过程中,每隔1毫秒发生一次定时中断。 也就是说,每隔1毫秒在SysTick_Handler(void )中执行一次。重新编译链接,发现问题:没有加载中断配置文件。双击文件夹,导航到切片中的“外围设备库”文件夹,添加misc.c文件,然后重新编译0 errors。分析delay_ms的(200 )函数void Delay_Ms(u32 nTime )TimingDelay=nTime;while (定时延迟!=0;以下由于全局变量T

12、imingDelay=200每隔1毫秒进入SysTick_Handler(void )并减去一次,因此在执行了Delay_Ms(200 )函数之后,延迟了200ms。void SysTick_Handler(void )TimingDelay-;以下7.2 LCD函数的说明7.2.1 LCD函数的概要进入lcd.h文件后,包含所有函数,从第164行开始是现有的函数。看一下您想进入哪个函数,右键单击,然后选择“进入相关函数”。即,STM3210B_LCD_Init(void )表示LCD的初始化,只需要理解功能和参数,就可以在有时间的时候看到函数如何实现。 进入具体工程看看相关函数的说明。7.2

13、.2 LCD工程代码分析进入main.c文件,首先分析systick相关代码。右键单击相关函数,查看注释。初始化液晶屏()LCD_Clear(Blue) /屏幕变为蓝色AAMMMMMMMMMMMMMMMM* Function Name : LCD_Clear*清除description : clearthesholelcd./屏幕* input : color : thecolorofthebackground* Output : None* Return : NoneOOOOMMMMMMMMMMMMMMMMMMMMMMMMMMMvoid LCD _ clear (u 16颜色)LCD_Set

14、BackColor(Blue) /背景色蓝色AAMMMMMMMMMMMMMMMM* function name : LCD _ setback color* description : setsthebackgroundcolor* input :-color : specifiesthebackgroundcolorcodergb (5-6-5)* output :-back color : backgroundcolorglobalvariableusedby* LCD _ drawcharandlcd _ drawpicturefunctions。* Return : NoneOOOOM

15、MMMMMMMMMMMMMMMMMMMMMMMMMMvoidalcd _ setback color (vu16 color )lcd_settextcolor字体白色AAMMMMMMMMMMMMMMMM* function name : LCD _ settext color* description : setsthetextcolor。* input :-color : specifiesthetextcolorcodergb (5-6-5)* output : -文本颜色: textcolorglobalvariableusedbylcd _ draw char*和LCD _ draw图片函数。* Return : NoneOOOOMMMMMMMMMMMMMMMMMMMMMMMMMMMvoidnlcd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论