



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统(STM32微控制器)实训指导书意法半导体公司的STM32微控制器具有32位字长的CPU,使用精简指令系统(RISC)。精简指令系统的指令字长固定,译码方便,相对于复杂指令系统(CISC),精简指令系统的处理效率更高。具有32位字长CPU的STM32系列微控制器的处理能力远高于8位和16位单片机,同时集成了与32位CPU相适应的强大外设(如双通道ADC、多功能定时器、7通道DMA、SPI等),能够完成过去一般单片机所无法达到控制功能。现在,已经形成了以8位单片机为主流的低端产品和以32位微控制器为主流的高端产品两大市场。对于自动化领域的从业人员,了解32位微控制器的结构、特点,掌握其使用方法,是很有必要的。一、 关于学习方法此前,我们已经学习过C语言程序设计、微机原理、单片机原理及应用等相关课程。这些课程的学习是系统的、完整的、全面的,是有老师讲授的。这种学习方法,适合在学校学习一些重要的基础理论课程。在工作中,我们常常会遇到新的东西,需要以已有的知识作为基础,去解决问题、完成任务。这就需要不同于前述的另一种学习方法。这种方法是建立在自学基础上的,以解决实际问题为目的,允许通过局部的、模仿性的手段,来实现既定目标。这种方法在工程实践中的应用是非常普遍的。“白猫黑猫,能抓住老鼠就是好猫”。能解决问题的方法就是好方法。本次实训采取的方法是:将参考资料发给同学,同学自学其中需要的部分。在指导教师引导下,体验各个控制项目、理解各组成部分,再以原控制软件为基础进行修改和移植,获得要达到的控制效果。在本次实训中,我们使用的微控制器型号为STM32F103RB。STM32F103RB是STM32微控制器系列中的一种,内部具有128KB程序存储器、20KB随机读写存储器、1个16位高级定时器、3个16位通用定时器、2个SPI、2个I2C、3个USART、1个USB、1个CAN、2个ADC。芯片为64引脚LQFP封装,有51个I/O引脚。开发环境使用Keil uVision4 MDK。它是我们学习51内核单片机时使用的Keil uVision2和Keil uVision3提高版本,具有相同或相似的界面及使用方法。STM32微控制器的结构与MCS51单片机是相似的,也是用读写寄存器来使用内部的个部件。但是,STM32的规模庞大,远非51内核单片机可比。完成一个复杂的功能,可能需要操作多个寄存器的多个位,掌握其使用方法确有一定难度。为了解决这个问题,意法半导体公司提供了固件库。有了固件库,我们就可以调用函数来实现所需要的功能,这比通过操作寄存器实现就容易多了。二、 关于实训环境实训是在一套基于STM32微控制器的实验装置上进行的。装置采用积木式结构,由J-LINK(V8)仿真器、主板、最小系统板、12864液晶显示屏、3.2”TFT彩色液晶触摸屏、显示及键盘板、10M网络接口板、USB/RS232转接线等组成。下面对将要使用的硬件、软件作简要说明。1 微控制器:在本次实训中,我们使用的微控制器型号为STM32F103RB。它是STM32微控制器系列中的一种,内部具有128KB程序存储器、20KB随机读写存储器、1个16位高级定时器、3个16位通用定时器、2个SPI、2个I2C、3个USART、1个USB、1个CAN、2个ADC。芯片为64引脚LQFP封装,有51个I/O引脚。2 开发环境:使用Keil uVision4 MDK。它是我们学习51内核单片机时使用的Keil uVision2和Keil uVision3提高版本,具有相同或相似的界面及使用方法。3 J-LINK仿真器:仿真器连接计算机的一个USB口和STM32微控制器的几个专用位,使得计算机可以对微控制器进行下载、调试。4 固件库:STM32微控制器的结构与MCS51单片机是相识的,也是提高读写寄存器来使用内部的个部件。但是,STM32的规模庞大,远非51内核单片机可比。完成一个复杂的功能,可能需要操作多个寄存器的数个位,掌握其使用方法确有一定难度。为了解决这个问题,意法半导体公司提供了固件库。有了固件库,我们就可以调用函数来实现所需要的功能,这比通过操作寄存器实现就容易多了。三、 软件及文档说明发给大家的电子文档中,汇集了多种资料和软件,下面把最常用的一些作分类介绍。1 入门资料:STM8 32选型手册.pdf、STM32F10x常见应用解析(2008年9月).pdf、STM32的优越外设介绍 (2007年12月).pdf、STM32应用中的常见问题.pdf、STM32硬件设计问题解答.pdf。以上文档在“stm32资料常用资料”文件夹下。2 硬件资料:STM32中文参考手册_V10.pdf。在“stm32资料常用资料”文件夹下。3 固件库资料:STM32固件库使用手册的中文翻译版.pdf、STM32固件库v3.5变更指南.doc。中文手册只到2.0版本为止,现在通用的是3.5版本的固件库,所以参考变更指南。以上文档在“stm32资料常用资料”文件夹下。4 STM32F103RB芯片资料:STM32F103x8B_DS_CH_V10.pdf。在“STM32芯片数据手册STM32中文数据手册”5 实训装置资料:STM32实验系统.pdf。6配置STM32微控制器的系统时钟以及使用嘀嗒时钟(定时器)的资料:在“stm32资料stm32_时钟及systick”文件夹下。7 介绍STM32微控制器的位带操作的资料:在“stm32资料STM32_位带”文件夹。8 介绍STM32微控制器的中断系统的资料:在“stm32资料stm32_中断”文件夹下。9 介绍STM32微控制器的中断系统的资料:在“stm32资料STM32定时器”文件夹。10 STM32的V3.5.0固件库环境及模板及例程:“STM32F10x_StdPeriph_Lib_V3.5.0”文件夹。四、 实训项目及日程第一天:任务:1)学习STM32微控制器资料,熟悉Keil MDK软件和J-LINK仿真器的安装与使用。学习LED灯控制软件结构,弄懂其SysTick延时的原理和使用方法,弄懂GPIO的输出控制方法。2)修改SysTick延时时间和输出控制方案,得到新的LED发光组合。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物电学院ARM实验室STM32F103Rx_实验01 跑马灯。导学:“STM32F10x_StdPeriph_Lib_V3.5.0”文件夹集合了STM32的固件库V3.5.0版。“物电学院ARM实验室”和“物电学院uCOS实验室”两个文件夹中有多个应用工程范例。其中“物电学院ARM实验室STM32F10x_模板”,已进行了必要的部件初始化(主要是时钟部分和对串口printf函数的支持),加入应用程序后即可工作。时钟部分的初始化设置为使用外部高速时钟(8MHz)经分频获得工作主频(72MHz),供定时器27和窗口看门狗以及备份接口使用的时钟频率为36MHz,供定时器1、8和ADC以及GPIOAGPIOE等使用的时钟频率为72 MHz。“STM32F103Rx_实验01 跑马灯”中因为不需要使用串口,拿掉了“usart.c”这个支持串口的文件。“delay.c”是用来使用嘀嗒时钟实现延时的。在51内核单片机中,短暂延时常用软件循环实现。这种做法在汇编语言中很简单,在C程序中就比较困难,因为不知道编译后会生成什么机器码、耗用多少时间。在STM32中这个问题就更突出。好在STM32中有一个嘀嗒时钟,它原本是用于嵌入式系统软件中提供基本时钟的,在不使用嵌入式系统软件时可以用来作短暂延时用。注意:这种延时方法同软件延时一样是占用CPU的,一般仅适用于短暂延时或任务很轻CPU富余量很大的场合。“led.c”是用于对驱动LED的端口进行初始化的。STM32集成了太多的外设,对于一个控制项目,可能很多外设是用不上的。为了尽量降低功耗,所有外设的时钟在复位后都是关闭的,这样外设就不工作也不耗电。如果要使用某个外设,首先要打开它的时钟,以及进行一些相关的初始化。对端口写“0”或“1”,有4种方法可使用。第一种方法是使用库函数GPIO_WriteBit既可写“0”也可写“1”,但速度最慢;第二种方法是使用库函数GPIO_ResetBits和GPIO_SetBits可分别写“0”或“1”,速度比较快;第三种方法是直接操作寄存器完成写“0”或“1”,本质上与第二种方法是相同的,但更直接,因而也更快一点;第四种方法是使用位带操作,速度是最快的。以上操作速度的差别,在非连续操作时是很小的,可以忽略不计。delay.h和led.h分别是delay.c和led.c的头文件。Keil uVision4 MDK界面中,用来将编译后生成的目标代码文件*.hex下载到STM32微控制器的FLASH中,可打开工程管理器。这两个操作是原来的Keil uVision2和Keil uVision3中没有的。第二天:任务:1)学习按键输入(扫描方式)软件结构,理解以扫描方式管理按键的工作原理和特点。2)对按键的输入响应进行修改,获得与原软件不同的LED响应效果。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物电学院ARM实验室STM32F103Rx_实验02 按键输入(扫描方式)。导学:这个工程中新加入了key.c文件。在key.c中有2个函数。KEY_Init ()是对按键所在端口进行输入初始化的,KEY_Scan ()是对按键进行扫描的。在KEY_Scan ()中为了举例,轮流使用2种方法对按键所在端口进行判断,分别是库函数法和位带法,实际使用任何一种均可。KEY_Scan ()的核心任务有:有键按下时能识别并返回该键编码(03),无键按下返回0xff(即255);能够排除键按下和松开时的抖动,不致发生误判;允许键较长时间按下,不致误判为多次按键。为此,采取的措施有:发现有键按下后间隔20mS再判一次,若仍为按下才确认此状态;只有在当前键状态为键松开时,又有键按下才返回键按下编码并进入键按下状态;确认4个键均松开后进入键松开状态。使用KEY_Scan ()进行键扫描,最长可耗时数十毫秒。key.h是key.c的头文件。第三天:任务:1)学习按键输入(外部中断方式)软件结构,与比扫描方式管理按键进行比对,理解以外部中断方式识别按键状态改变的优势。2)对按键的输入响应进行修改,获得与原软件不同的LED响应效果。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物电学院ARM实验室STM32F103Rx_实验03 按键输入(外部中断方式)。导学:使用键扫描的方法对键状态进行识别,就需要不断调用KEY_Scan (),这会对当前的工作造成较大影响。如果我们希望在按键没有按下时,不会干扰当前的工作,而一旦有键按下又能够马上响应,这就要用到中断。文件exti.c中,函数EXTI_InitInit ()对I/O端口的中断进行初始化,设置4个按键端口为上升沿和下降沿均产生中断。KEY1_DownKEY4_Down和KEY1_UpKEY4_Up是标志4个上升沿和下降沿的全局变量。在4个中断服务函数中,调用LevelDistinguish ()函数判断当前中断是上升沿还是下降沿,设置对应的变量。在主函数main中判别变量,驱动LED。事实上,对LED的处理也可以放在中断服务函数中处理,这样就可以做到对主函数中的正常工作的极小干扰。在主函数中调用了库函数NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2),设置使用4级抢占优先级和4级响应优先级。这两种优先级的区别是:抢占优先级是可以嵌套的,即低抢占优先级的中断服务可以被高抢占优先级的中断请求打断;响应优先级是不能嵌套的,高响应优先级的中断请求不能打断低响应优先级的中断服务,但不同响应优先级的中断源同时发出中断请求时,CPU会先响应高响应优先级中断请求。在文件exti.c中,NVIC_Init(&NVIC_InitStructure) 库函数设置抢占优先级和响应优先级均为0级。第四天:任务:1)学习串口+中断软件结构,理解以字符串打印方式发送、中断方式发送、中断方式接受的特点及使用方法。在软件中添加LED驱动和按键扫描文件。2)修改程序以实现:按KEY1键用字符串打印方式发送一个“KEY1”;按KEY2键用中断方式发送“KEY2”;接收到“KEY1ON”和“KEY1OFF”使LED1发光和熄灭;接收到“KEY2ON”和“KEY2OFF”使LED1发光和熄灭。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物电学院ARM实验室STM32F103Rx_实验05 串口+中断。导学:此工程由模板增补而成,在文件usart_int.c中的USART1_Init ()中使能了串口中断。USART1_IRQHandler ()是串口中断服务函数。文件usart_int.c中定义了TxBuffer1255和RxBuffer1255分别为串口发送缓冲区和串口接收缓冲区,定义了TxCounter1和RxCounter1为串口发送计数器和串口接收计数器。在usart_int.h中,将上述变量声明为外部变量。在主程序中,通过串口发送信息有两种方法:调用printf函数;将待发送的ASC码按顺序逐一放入TxBuffer1中,再向TxCounter1存入待发送的字符数。第一种方法,其间CPU一直由printf函数占用,直到发送完毕才退出,但使用方便,功能强。第二种方法,在完成对TxBuffer1和TxCounter1的赋值后,对串口的发送操作是在中断服务函数中完成的,对CPU的占用极少。串口接收是由其他设备的串口发送引起的,接收到的信息放在RxBuffer1中,字符数放在RxCounter1中,当判断RxCounter10且100mS未发生变化,即认为一次接收完成。串口通信的参数为:波特率9600、数据位8位、停止位1位、无奇偶校验。通信的另一方应按此设置。第五天:任务:1)学习定时器2定时中断软件结构,理解定时器2定时中断的使用方法。2)修改程序,使定时器2每5秒中断一次,在中断处理中对自动次数进行记录并通过串口发送中断次数。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物电学院ARM实验室STM32F103Rx_实验11 定时器2定时中断。导学:使用定时器定时中断,可以不干扰主程序的工作,在定时时间到来时进入定时中断服务程序。文件timer.c中的定时器初始化函数TIM2_Init (u16 arr, u16 psc)中的arr是定时器的自动重装值,psc是时钟预分频数(0是不分频,1是2分频,以此类推)。主函数中的TIM2_Init(5000, 7199),即为时钟预分频数7200,自动重装值5000,由于时钟是72MHz,每0.5S发生一次中断。改变arr和psc可以得到不同的中断周期。文件timer.c中的TIM2_IRQHandler ()是定时器2的中断服务函数,可在其中进行你需要的操作,但必须保证在下一次中断到来之前退出。第六天:任务:1)学习定时器3PWM输出软件结构,理解用定时器3产生PWM的方法,达到改变PWM的频率和占空比的目的。2)修改程序,在软件中添加按键中断文件,用KEY1和KEY2控制LED1的亮度,即每按KEY1和KEY2一次分别使输出到LED1的PWM占空比增加和减少20。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物电学院ARM实验室STM32F103Rx_实验12 定时器3PWM输出。导学:文件timer_pwm.c中的TIM3PWM_Init (u16 arr, u16 psc)函数设定TIM3工作在PWM状态。Arr和psc的作用与上一范例相同。定时器TIM3工作在向下计数方式,重装值为900。使用库函数TIM_SetCompare1(TIM3, ii)TIM_SetCompare4(TIM3, ii)可设定PWM比较值,这个值应在0900之间。定时器TIM3的计数器值PWM比较值时对应引脚输出低电平,否则输出高电平。这样,当PWM比较值大时引脚输出的低电平占比也比较大,LED亮度也就比较高。如果将TIM3的计数方式修改为向下计数,结果则相反。改变arr可以改变pwm的精度,改变psc可以改变pwm的频率。第七天:任务:1)学习DS18B20测温软件结构,理解数字温度传感器DS18B20与STM32微控制器的硬件接口和软件驱动方法。2)在软件中加入LED驱动文件,修改程序,实现若温度高于设定的上限则LED1亮,低于设定的下限则LED4亮,在上限和下限之间则LED2和LED3交替发光。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物电学院ARM实验室STM32F103Rx_实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 嘉兴古建施工方案公司(3篇)
- 元旦活动提前方案策划(3篇)
- 栽植黄栌施工方案(3篇)
- 室外采暖外网施工方案(3篇)
- 国风走秀活动方案策划(3篇)
- 铝合金储罐施工方案(3篇)
- 机加工考试题库及答案
- 餐饮组长考试题库及答案
- 老年病护理现状与进展
- 北京市朝阳区2023-2024学年七年级上学期期末考试生物试题含参考答案
- 《国际中文教育概论》课件全套 第1-12章 从对外汉语教学到国际中文教育- 国际中文教育前瞻
- 2024国际贸易重点总结
- 超声引导下神经阻滞
- 2024建筑施工高处作业安全技术规范
- 卫生院风险评估结果报告
- 单片机原理及应用课件
- 低压出线柜安装施工方案
- 4s店汽车维修配件管理制度
- 持续质量改进在中长导管护理中的应用及并发症的预防
- 新建砖砌台阶施工方案
- 拆除围墙砖石结构施工方案
评论
0/150
提交评论