ARM微控制器与嵌入式系统 课件全套 景妮琴 1 课程概览 - 41 如何在UCOS III上实现LED灯闪烁_第1页
ARM微控制器与嵌入式系统 课件全套 景妮琴 1 课程概览 - 41 如何在UCOS III上实现LED灯闪烁_第2页
ARM微控制器与嵌入式系统 课件全套 景妮琴 1 课程概览 - 41 如何在UCOS III上实现LED灯闪烁_第3页
ARM微控制器与嵌入式系统 课件全套 景妮琴 1 课程概览 - 41 如何在UCOS III上实现LED灯闪烁_第4页
ARM微控制器与嵌入式系统 课件全套 景妮琴 1 课程概览 - 41 如何在UCOS III上实现LED灯闪烁_第5页
已阅读5页,还剩809页未读 继续免费阅读

下载本文档

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

文档简介

ARM微控制器与嵌入式系统

1课程概述课程概述认识ARM嵌入式系统基本概念软件编程硬件使用接口应用玩转ARM微控制器,能够设计微控制器为核心的电子产品积累计算机、电路基础知识编程知识模电、数电知识备战全国大学生电子设计竞赛ARM嵌入式系统嵌入式系统是以应用为中心、以计算机技术为基础、软硬件均可裁剪、适用对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。其实我们现在说的嵌入式系统是狭义的即是基于某一款嵌入式微处理器(如ARM)所组成的嵌入到对象体中实现智能控制的系统,而广义的嵌入式系统面就比较广了(如单片机系统、DSP系统等)。微控制器MCU嵌入式系统嵌入式微控制器(MCU)嵌入式微处理器(MPU)嵌入式信号处理器嵌入式片上系统微控制器(MCU,单片机)CPU全球物联网市场发展趋势01234520172018F2021F2022F物联网新入网设备数量(单位:10亿)2019F 2020FIoT

Connection22017-2022年复合年均增长率=14.8%来源:ICinsights2018物联网发展推动MCU应用增长30123420172018F2019F2020F2021F2022F

物联网MCU销量(单位:10亿) IoTMCU

(M)来源:ICinsights20182017-2022复合年均增长率=17%微控制器应用广泛微控制器应用广泛微控制器应用广泛微控制器应用广泛MCU种类51系列单片机(8位单片机)宏晶科技的STC12ATMEL公司的AT89C52恩智浦(NXP)系列华邦公司

Dallas公司MCU种类AVR单片机ATMEGA128L单片机AVR32位UC3微控制器MCU种类PIC单片机MCU种类飞思卡尔单片机(飞思卡尔,原摩托罗拉公司)MCU种类恩智浦(NXP)系列单片机MCU种类MSP430单片机STM32微控制器10STM32定位大众市场MCU领导者:12大产品系列,超过50个产品线,千款型号,I/O兼容Cortex-M0Cortex-M0+Cortex-M3Cortex-M4Cortex-M7高性能系列主流系列超低功耗系列无线系列Note:Cortex-M0+Radio

Co-processor本学期的开发对象ARM-Cortex-M4架构的微控制器意法半导体公司的STM32F407单片机预备知识英语阅读能力C语言基础数字电路和计算机的基础知识预备知识英语阅读能力C语言基础数字电路和计算机的基础知识预备知识英语阅读能力C语言基础数字电路和计算机的基础知识课程概述让我们一起进入微控制器和嵌入式的学习吧!LET’SSTART!ARM微控制器与嵌入式系统

2ARM概述主讲人:景妮琴北京电子科技职业学院ARM历史:起源ARM历史:起源1980年,英国BBC电视台策划了一系列关于计算机的电视节目。但导演发现一个问题:怎么给没见过电脑的观众画饼?ARM历史:起源此时美国苹果公司已经推出适于个人使用的微型电脑——Apple-II,个人电脑在美国风靡。ARM历史:起源ARM历史:起源迫于无奈之下,公司委任索菲·威尔森领导研发自己的处理器,因为Acorn公司资源掣肘,没有能力开发CISC结构的处理器,只能选择开发晶体管数较少的RISC处理器。ARM历史:起源

ARM的由来ARM历史:起源ARM历史:起源ARM历史:蓬勃发展NewtonPDAARM历史:蓬勃发展ARM历史:蓬勃发展1998年4月17日,ARM公司同时在英国伦敦证交所和美国纳斯达克上市。ARM历史:蓬勃发展ARM历史:蓬勃发展2007年底,ARM的雇员总数为1728人,持有专利700项,全球分支机构31家,合作伙伴200家,年收入2.6亿英镑。卖身软银2014年7月18日,软银宣布将以243亿英镑(约合320亿美元)收购ARM。ARM系列处理器ARM系列处理器ARM系列处理器

转自:/article/13324.htmlARM系列处理器麒麟980处理器:Cortex-A76架构Cortex-M处理器家族Cortex-M处理器家族Cortex-M处理器家族CMSIS-微控制器软件接口标准用户实时操作系统CMSIS层微控制器小结ARM发展史ARM系列处理器Cortex-M处理器家族CMSIS-微控制器软件接口标准ARM微控制器与嵌入式系统

3STM32微控制器主讲人:景妮琴北京电子科技职业学院STM32产品里程碑92018首批基于Cortex-M3通用MCU首批基于Cortex-M3超低功耗MCU首个高性能产品线首个高性能Cortex-M4入门级STM32F0Cortex-M0DSP+增强模拟外设Cortex-M4入门级超低功耗

Cortex-M0+首个基于Cortex-M7MCU超低功耗Cortex-M4#1

ULP273

ULPBench™2007

2009

2010

2011

2012

2013

2014

2015

2016-17最高性能MCU2020CoremarkCortex-M7™超低功耗+增强性能双核内置2.4GHzRF本学期的开发对象ARM-Cortex-M4架构的意法半导体公司的微控制器STM32F407ZGTxSTM32微控制器什么是STM32ST—意法半导体,是一个公司名,即SOC厂商M—Microelectronics的缩写,表示微控制器32—32bit的意思,表示这是一个32bit的微控制器ST公司微控制命名规范

ST公司微控制命名规范STM32能做什么7MeteringCar

audioApplianceSurveillanceeBike DockingSmart

wheelRoboticIoTWearable Drone Share

bike传统应用:MCU作为主控使用新应用:MCU+RF+Sense+

Algorithm2007201320142018……

ST公司微控制器按应用及功能分为: 1.自动驾驶 2.无线射频 3.低功耗 4.主流基础型 5.高性能STM32能做什么STM32怎么选型ST(意法半导体)推出了以基于ARMCortex™-M4为内核的STM32F4系列高性能微控制器,其采用了90纳米的NVM工艺和ART。ART技术使得程序零等待执行,提升了程序执行的效率,将Cortext-M4的性能发挥到了极致,使得STM32F4系列可达到168MHz。自适应实时加速器能够完全释放Cortex-M4内核的性能;当CPU工作于所允许的频率(≤168MHz)时,在闪存中运行的程序,可以达到相当于零等待周期的性能。STM32F4系列微控制器集成了单周期DSP指令和FPU,提升了计算能力,可以进行一些复杂的计算和控制。STM32F4xx微控制器简介STM32微控制器选型核心板处理器片上资源简介ST公司微控制均可参考官方选型手册来了解处理器的片上资源。对于STM32F407ZGT6而言片上资源如下:1、最大工作时钟168MHz2、Cortex-M4内核3、Flash(闪存)1024Kbytes、RAM(随机存取存储器)192Kbytes 4、144个引脚,LQFP的封装,114个IO5、12个16Bit定时器、2个32Bit定时器6、3个ADC、24个ADC通道、2个DAC7、3个SPI、2个IIS、3个IIC、6个串口、2个CAN总线8、1个SDIO、1个FSMC、1个USBOTG-FS、1个USBOTG-HS9、1个DCMI、1个RNG注:STM32F4xx内部框图可参考STM32F4xx数据手册STM32F407内部框图STM32最小系统STM32最小系统STM32最小系统电源电路复位电路时钟电路程序下载电路启动电路程序下载电路电源电路小结STM32产品里程碑STM32如何选型STM32F407的片上资源STM32F407的内部框图STM32最小系统ARM微控制器与嵌入式系统

4多文件编程主讲人:景妮琴北京电子科技职业学院Cortex-M的开发方法程序的构造过程模块化编程(多文件编程)所谓模块化编程,就是多文件(.c文件)编程,一个.c文件和一个.h文件可以被称为一个模块。多文件编程也就是指一个程序中包含了多个源文件(.C文件)以及头文件(.h文件)。模块化编程方法(多文件编程方法)库函数的编写源文件的编写库函数的调用主程序的编写模块化编程方法(多文件编程方法)模块化编程方法(多文件编程方法)初级方案:3个函数的声明和实现放到一个文件中,再在main函数中调用。在DEV-C++中编辑一个.h文件(这里可以命名为my.h)并保存。再编辑main.c文件(注意main.c文件要和我们的my.h文件放到同一个目录下)这个方法要新建一个工程才能完成。模块化编程方法(多文件编程方法)初级方案:模块化编程方法(多文件编程方法)初级方案虽然实现了函数的声明,但是模块化的编程是提倡在.h文件中只包含一些声明,我们却放进了三个函数的实现。一般提倡把函数的时间放到另一个.c文件中。修改版:main.c文件:只放main函数myfile.h文件:放3个函数的声明myfile.c文件:放3个函数的实现在Dev-C++下建一个工程(与初级方案相同),建好工程后在该目录下加载main.c文件即可。模块化编程方法(多文件编程方法)建工程的时候我们可以选择空工程,也可以选择典型的Helloworld工程,如果选择后者,系统会自动建立一个Helloworld的main.c文件;如果选择前者,后面我们需要建立一个main.c加载到工程中。模块化编程方法(多文件编程方法)这时我们新建myfile.c文件,注意重命名时输入myfile.c,并在文件中输入3个函数的实现。模块化编程方法(多文件编程方法)按照同样的办法这时我们新建myfile.h文件,注意重命名时输入myfile.h,并在文件中输入3个函数的声明。模块化编程方法(多文件编程方法)最后修改main.c中的代码关于头文件的内容必须注意:1)头文件中可以和C程序一样引用其它头文件,可以写预处理块,但不要写具体的语句。2)可以声明函数,但不可以定义函数。3)可以声明常量,但不可以定义变量。4)可以“定义”一个宏函数。注意:宏函数很象函数,但却不是函数。其实还是一个声明。5)结构的定义、自定义数据类型一般也放在头文件中。6)多文件编程时,只能有一个文件包含main()函数,因为一个工程只能有一个入口函数。我们把包含main()函数的文件称为主文件。7)为了更好的组织各个文件,一般情况下一个.c文件对应一个.h文件,并且文件名要相同,例如fun.c和fun.h。8)头文件可以多次包含相同的头文件,但效果与只包含一次相同。9)防止重复包含的措施

#ifndefMY_INCLUDE_H#defineMY_INCLUDE_H//头文件内容

#endif

模块化编程实例(多文件编程实例)多文件程序的编写要求:C文件中实现求圆的面积,圆的周长,正方形的面积主函数实现调用函数模块化编程实例(多文件编程实例)小结Cortex-M的开发方法程序的构造过程模块化编程方法(多文件编程方法)模块化编程实例(多文件编程实例)ARM微控制器与嵌入式系统

5STM32微控制器开发环境主讲人:景妮琴北京电子科技职业学院STM32微控制器开发环境开发工具安装Keil5调试工具下载程序 1、IAR-EWARM是IAR公司推出 2、KEIL原属于KEIL公司2005年被ARM收购 3、STM32CubeMx是有ST公司推出的一款

图形化配置编程的软件。

编程语言可以是C、C++、JAVA、Python 等。

STM32微控制器开发工具对与STM32微控制器编程使用的开发工具

STM32开发环境搭建-安装Keil5获取安装包安装Keil5安装STM32芯片包(添加器件库)获取Keil5安装包

到KEIL的官网下载:/download/product/。提供试用版给你,试用版使用时间是1个月,要长期使用还得买注册版。

STM32开发环境搭建-安装Keil52.安装KEIL5双击KEIL5安装包,开始安装,next

STM32开发环境搭建-安装Keil52.安装KEIL5Agree,next

STM32开发环境搭建-安装Keil52.安装KEIL5选择安装路径,路径不能带中文,next。

STM32开发环境搭建-安装Keil52.安装KEIL5填写用户信息,全部填空格(键盘的space键)即可,next。

STM32开发环境搭建-安装Keil52.安装KEIL5Finish,安装完毕。

STM32开发环境搭建-安装Keil53.安装STM32芯片包(添加器件库)直接去keil的官网下载:/dd2/。在官网中找到STM32F4系列的包下载到本地电脑即可。双击keil图标,界面如下:点击pack安装。

STM32开发环境搭建-安装Keil53.安装STM32芯片包(添加器件库)选择ok,然后点击file

import选择pack的路径进行安装。

STM32开发环境搭建-安装Keil53.安装STM32芯片包(添加器件库)安装好以后就会发现pack中出现了器件STM32F407,这样我们就可以进行微控制器的开发了。

STM32开发环境搭建-安装Keil5调试工具调试协议JTAG协议SWD调试模式RDI接口调试工具JLink仿真器ULink仿真器ST-Link仿真器调试协议--JTAG协议JTAG(JointTestActionGroup,联合测试行动小组)是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如ARM、DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。调试协议--SWD调试模式SWD接口:串行调试(SerialWireDebug),是一种和JTAG不同的调试模式,使用的调试协议也不一样,最直接的体现在调试接口上,与JTAG的20个引脚相比,SWD只需要4个(或者5个)引脚,结构简单,但是使用范围没有JTAG广泛,主流调试器上也是后来才加的SWD调试模式。 JTAGSWD

调试协议--SWD调试模式RDI接口:远程调试接口(RemoteDebugInterface),是ARM公司提出的标准调试接口,主要用于ARM芯片的仿真,由于各个IDE厂商使用的调试接口各自独立,硬件无法进行跨平台的调试。现在众多的IDE厂家都逐步采用标准RDI作为ARM仿真器的调试接口,因此使跨平台的硬件调试成为可能。STM32调试工具—Jlink仿真器J-Link是德国SEGGER公司推出基于JTAG的仿真器。简单地说,是给一个JTAG协议转换盒,即一个小型USB到JTAG的转换盒,其连接到计算机用的是USB接口,而到目标板内部用的还是jtag协议。它完成了一个从软件到硬件转换的工作。JLINK是一个通用的开发工具,可以用于KEIL、IAR、ADS等平台。速度,效率,功能都很好,据说是众多仿真器里最强悍的。

STM32调试工具—Ulink仿真器ULINK是ARM/KEIL公司推出的仿真器,目前网上可找到的是其升级版本,ULINK2和ULINKPro仿真器。ULINK/ULINK2可以配合Keil软件实现仿真功能,并且仅可以在Keil软件上使用,增加了串行调试(SWD)支持,返回时钟支持和实时代理等功能。STM32调试工具—STlink仿真器ST-LINK是专门针对意法半导体STM8和STM32系列芯片的仿真器。ST-LINK/V2指定的SWIM标准接口和JTAG/SWD标准接口,其主要功能有:编程功能仿真功能仿真性能编程性能STM32微控制器下载程序选择调试工具,安装驱动修改设置下载程序到目标板

STM32微控制器下载程序—安装驱动安装ST-Link的驱动STM32微控制器下载程序—修改设置打开工程,选择options,单击Debug选项卡,选择ST-LinkDebugger,点击Settings。STM32微控制器下载程序—修改设置单击完Settings后,出现窗口,点击确定就可以使用ST-Link下载程序了。如果仿真器连接了电脑则MDK会识别出仿真器仿真器连接了电脑和开发板,并且开发板已经上电,则仿真器会识别出开发板的芯片并显示出来

STM32微控制器下载程序如果前面步骤都成功了,接下来就可以把编译好的程序下载到开发板上运行。下载程序不需要其他额外的软件,直接点击KEIL中的LOAD按钮即可。程序下载后,如果没有出现实验现象,按复位键试试。 小结开发工具安装Keil5调试工具下载程序ARM微控制器与嵌入式系统

6C语言基础复习主讲人:景妮琴北京电子科技职业学院C语言基础复习位操作define宏定义ifdef条件编译extern变量申明typedef变量别名结构体符号

描述

运算规则&

按位与两个位都为1时,结果才为1|

按位或

两个位都为0时,结果才为0^

按位异或两个位相同为0,相异为1~

取反0变1,1变0<<

左移各二进位全部左移若干位,高位丢弃,低位补0>>

右移各二进位全部右移若干位,对无符号数,高位补0位操作位操作:就是对类型变量可以在位级别进行操作C语言支持下面6种位操作:位操作1.不改变其他位的情况下,对某几位进行设值方法:对需要设置的位用“&”操作符进行清零操作,然后用“|”操作符设值。例:要改变GPIOA->BSRRL的状态,可以先对寄存器的值进行“&”清零操作,然后进行“|”或运算。GPIOA->BSRRL&=0xFF0F;//这是将第4-7位清0GPIOA->BSRRL|=0x0040;//设置相应位的值,不改变其他位的值位操作2.移位操作提高代码的可读性GPIOx->ODR=(((uint32_t)0x01)<<pinpos);这个操作就是将ODR寄存器的第pinpos位设置为1使用左移比设定一个固定的值要好看,并且重用性高。如:GPIOx->ODR=(((uint32_t)0x03)<<4);GPIOx->ODR=0x0030;这两个代码当然是前一句的重用性高一些。位操作3.取反操作技巧取反操作经常与“&”操作一起使用,把变量的某位清零如:GPIOx->ODR&=~(((uint32_t)0x01)<<4);这个代码就是把bit4位清零10011111000000010000010011111011位操作4.位操作实例

(1)把变量的某位清零:此处我们以变量a代表寄存器,并假设寄存器中本来已有数值,此时我们需要把变量a的某一位清零,且其它位不变。如下代码清单:1//定义一个变量a=10011111b(二进制数)2unsignedchara=0x9f;3//对bit2清零4a&=~(1<<2);

5//括号中的1左移两位,(1<<2)得二进制数:00000100b6//按位取反,~(1<<2)得11111011b7//假如a中原来的值为二进制数:a=10011111b8//所得的数与a作”位与&”运算,a=(10011111b)&(11111011b),9//经过运算后,a的值a=10011011b&10//a的bit2位被被零,而其它位不变。10011011

100000110000000100000100100000110000010010000111位操作4.位操作实例(2)对变量的某位进行赋值寄存器位通过“|=”可以对某位进行赋值。1//a=10000011b2a|=(1<<2);3//a=10000111b位操作4.位操作实例(3)对变量的某位取反我们需要对寄存器的某个位进行取反操作,即1变0,0变1,这可以直接用如下操作,其它位不变,见代码清单。1//a=10010011b2//把bit6取反,其它位不变34a^=(1<<6);5//a=11010011bdefine宏定义define是C语言中的预处理命令,用于宏定义,可以提高源代码的可读性,方便编程。常见的格式:#define标识符字符串其中“标识符”是指:宏定义的宏名“字符串”可以是常数、表达式、格式串等例:#definePLL_M8定义PLL_M的值为8ifdef条件编译单片机程序开发过程中,经常会遇到一些情况:当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令的常见形式:#ifdef标识符程序段1#else程序段2#endif作用:当标识符已经被定义过(一般使用#define命令定义),则对程序段1进行编译,否则编译程序段2。extern变量声明C语言中extern可以置于变量或函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。注意,对于extern声明变量可以多次,但定义只有一次。例:如果看到externu16USART_RX_STA,那么一定就有一个地方定义了u16USART_RX_STA还要注意:extern只能引用,不能赋值。typedef类型别名typedef用于为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。typedefstruct{uint32_tGPIO_Pin;GPIOMode_TypeDefGPIO_ModeGPIOSpeed_TypeDefGPIO_SpeedGPIOOType_TypeDefGPIO_OType;GPIOPuPd_TypeDefGPIO_PuPd}GPIO_InitTypeDef;这个意思就是为结构体定义了一个类型别名GPIO_InitTypeDef这样就可以通过这个类型定义变量了:GPIO_InitTypeDefmy_GPIO;结构体声明结构体类型:Struct结构体名{成员列表;}变量名列表;StructU_TYPE{IntBaudRate;IntWordLength;}Usart1,Usart2;这个意思是定义了两个结构体类型的变量Usart1和Usart2。小结位操作define宏定义ifdef条件编译extern变量申明typedef变量别名结构体ARM微控制器与嵌入式系统

GPIO结构主讲人:景妮琴北京电子科技职业学院STM32寄存器开发步骤STM32微控制通过寄存器开发可参考STM32xxxx参考手册(以STM32F4xx参考手册为例)。1、新建工程2、了解STM32微控制时钟框图3、了解STM32微控制器GPIO内部结构4、了解寄存器使用方法5、配置GPIO6、点亮一盏LED灯STM32微控制器-GPIO工作模式STM32微控制器-GPIO工作模式输入模式输入浮空输入上拉输入下拉模拟功能输出模式具有上拉或下拉功能的开漏输出具有上拉或下拉功能的推挽输出具有上拉或下拉功能的复用功能推挽具有上拉或下拉功能的复用功能开漏GPIO输入浮空/上拉/下拉模式GPIO模拟模式GPIO开漏输出模式GPIO推挽输出模式GPIO开漏复用输出模式GPIO推挽复用输出模式推挽和开漏推挽输出:可以输出强高低电平,连接数字器件

推挽和开漏推挽输出:可以输出强高低电平,连接数字器件

推挽和开漏开集

如图,开集的意思,就是集电极C一端什么都不接,直接作为输出端口。如果要用这种电路带一个负载,比如一个LED,必须接一个上拉电阻,就像这样。当Vin没有电流,Q5断开时,LED亮。

当Vin流入电流,Q5导通时,LED灭。推挽和开漏开漏电路,就是把上图中的三极管换成场效应管(MOSFET)。

N型场效应管各个端口的名称:

推挽和开漏开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极.要得到高电平状态需要上拉电阻才行.适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)STM32微控制器-GPIO(通用I/O)每个通用I/O端口包括:

4个32位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR和GPIOx_PUPDR)2个32位数据寄存器(GPIOx_IDR和GPIOx_ODR)1个32位置位/复位寄存器(GPIOx_BSRR)1个32位锁定寄存器(GPIOx_LCKR)2个32位复用功能选择寄存器(GPIOx_AFRH和GPIOx_AFRL)ARM微控制器与嵌入式系统

时钟树主讲人:景妮琴北京电子科技职业学院STM32寄存器开发步骤STM32微控制通过寄存器开发可参考STM32xxxx参考手册(以STM32F4xx参考手册为例)。1、新建工程2、了解STM32微控制时钟框图3、了解STM32微控制器GPIO内部结构4、了解寄存器使用方法5、配置GPIO6、点亮一盏LED灯STM32微控制器-系统时钟注:时钟框图可参考STM324xx参考手册STM32微控制器-系统时钟系统时钟分类:STM32F4有5个最重要的时钟源,分别为:HSI,HSE,LSI,LSE,PLL。从时钟频率上分为:高速时钟:HIS,HSE,PLL;低速时钟:LSI,LSE从来源可以分为:外部时钟源:HSE,LSE内部时钟源:HIS,LSI,PLLSTM32微控制器-系统时钟1:LSI是低速内部时钟,RC振荡器,频率为32KHz左右,供独立看门狗和自动唤醒单元使用2:LSE是低速外部时钟,接频率为32.768KHz的石英晶体。这个主要是RTC的时钟源3:HSE是高速外部时钟,可接石英/陶瓷谐振器或者接外部时钟源,频率范围为4MHz~26MHz。我们的开发板接的是8MHz的晶振。HSE可以直接作为系统时钟或者PLL输入4:HSI是高速内部时钟,RC振荡器频率为16MHz,可以直接作为系统时钟或者用于PLL输入5:PLL为锁相环倍频输出。STM32微控制器-系统时钟5:PLL为锁相环倍频输出。STM32F4有两个PLL:主PLL由HSE或HIS提供时钟信号,并具有两个不同的输出时钟第一个输出PLLP用于生成高速的系统时钟(最高168MHz)第二个输出PLLQ用于生成USBOTGFS的时钟(48MHz),随机数发生器的时钟和SDIO的时钟专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能STM32微控制器-系统时钟主PLL输出第一个高速时钟PLLP的计算方法:时钟源频率/M*N/PPLLCLKSYSCLK如:外部晶振HSE为8MHz,设定M=8,N=336,P=28MHz/8*336/2=168MHz选择HSE为PLL时钟源,同时SYSCLK时钟源为PLL,那么SYSCLK时钟为168MHz。STM32微控制器-系统时钟A.这里是看门狗时钟输入。从图中可以看出,看门狗时钟源只能是低速的LSI时钟。B.这里是RTC时钟源,从图上可以看出,RTC的时钟源可以选择LSI,LSE,以及HSE分频后的时钟,HSE分频系数为2~31。C.这里是STM32F4输出时钟MCO1和MCO2。MCO1是向芯片的PA8引脚输出时钟。它有四个时钟来源分别为:HSI,LSE,HSE和PLL时钟。MCO2是向芯片的PC9输出时钟,它同样有四个时钟来源分别为:HSE,PLL,SYSCLK以及PLLI2S时钟。MCO输出时钟频率最大不超过100MHz。D.这里是系统时钟。SYSCLK系统时钟来源有三个方面:HSI,HSE和PLL。在我们实际应用中,因为对时钟速度要求都比较高我们才会选用STM32F4这种级别的处理器,所以一般情况下,都是采用PLL作为SYSCLK时钟源。根据前面的计算公式,大家就可以算出你的系统的SYSCLK是多少。STM32微控制器-系统时钟E.

这里我们指的是以太网PTP时钟,AHB时钟,APB2高速时钟,APB1低速时钟。这些时钟都是来源于SYSCLK系统时钟。其中以太网PTP时钟是使用系统时钟。AHB,APB2和APB1时钟是经过SYSCLK时钟分频得来。这里大家记住,AHB最大时钟为168MHz,APB2高速时钟最大频率为84MHz,而APB1低速时钟最大频率为42MHz。B.这里是RTC时钟源,从图上可以看出,RTC的时钟源可以选择LSI,LSE,以及HSE分频后的时钟,HSE分频系数为2~31。F.这里是指I2S时钟源。I2S的时钟源来源于PLLI2S或者映射到I2S_CKIN引脚的外部时钟。I2S出于音质的考虑,对时钟精度要求很高。STM32F4开发板使用的是内部PLLI2SCLK。STM32微控制器-系统时钟G.这是STM32F4内部以太网MAC时钟的来源。对于MII接口来说,必须向外部PHY芯片提供25Mhz的时钟,这个时钟,可以由PHY芯片外接晶振,或者使用STM32F4的MCO输出来提供。然后,PHY芯片再给STM32F4提供ETH_MII_TX_CLK和ETH_MII_RX_CLK时钟。对于RMII接口来说,外部必须提供50Mhz的时钟驱动PHY和STM32F4的ETH_RMII_REF_CLK,这个50Mhz时钟可以来自PHY、有源晶振或者STM32F4的MCO。我们的开发板使用的是RMII接口,使用PHY芯片提供50Mhz时钟驱动STM32F4

ETH_RMII_REF_CLK。H.这里是指外部PHY提供的USBOTGHS(60MHZ)时钟。STM32微控制器-系统时钟ARM微控制器与嵌入式系统

STM32寄存器开发-新建工程主讲人:景妮琴北京电子科技职业学院STM32寄存器开发步骤STM32微控制通过寄存器开发可参考STM32xxxx参考手册(以STM32F4xx参考手册为例)。1、新建工程2、了解STM32微控制时钟框图3、了解STM32微控制器GPIO内部结构4、了解寄存器使用方法5、配置GPIO6、点亮一盏LED灯STM32寄存器开发-新建工程双击keil5的图标,打开如下界面STM32寄存器开发-新建工程Project->NewProject命名为first_reg,保存在路径下STM32寄存器开发-新建工程选择器件->STM32F407ZGT6,点击OKSTM32寄存器开发-新建工程勾选CMSIS中的CORE和Device中的Startup,点击OKSTM32寄存器开发-新建工程建好工程后,加载一个C文件,右击SourceGroup1,添加新建项目,选择CFile(.c),命名为main.c,点击Add。STM32寄存器开发-新建工程建好工程后,加载一个C文件,右击SourceGroup1,添加新建项目,选择CFile(.c),命名为main.c,点击Add。STM32寄存器开发-新建工程然后在main.c中添加程序,进行编译,出现下面无错误无警告就编译完成,可以下载程序了。编译无错误,无警告下载ARM微控制器与嵌入式系统

STM32寄存器开发-点亮led灯主讲人:景妮琴北京电子科技职业学院STM32寄存器开发步骤STM32微控制通过寄存器开发可参考STM32xxxx参考手册(以STM32F4xx参考手册为例)。1、新建工程2、了解STM32微控制时钟框图3、了解STM32微控制器GPIO内部结构4、了解寄存器使用方法5、配置GPIO6、点亮一盏LED灯STM32微控制器-GPIO工作方式上电复位后,GPIO默认为浮空状态,部分特殊功能引脚为特定状态。1.2GPIO相关配置寄存器每组GPIO端口的寄存器包括:一个端口模式寄存器(GPIOx_MODER)一个端口输出类型寄存器(GPIOx_OTYPER)一个端口输出速度寄存器(GPIOx_OSPEEDR)一个端口上拉下拉寄存器(GPIOx_PUPDR)一个端口输入数据寄存器(GPIOx_IDR)一个端口输出数据寄存器(GPIOx_ODR)一个端口置位/复位寄存器(GPIOx_BSRR)一个端口配置锁存寄存器(GPIOx_LCKR)两个复位功能寄存器(低位GPIOx_AFRL&GPIOx_AFRH)4个32位配置寄存器2个32位数据寄存器如果配置一个IO口需要2个位,那么刚好32位寄存器配置一组IO口16个IO口如果配置一个IO口只需要1个位,一般高16位保留BSRR寄存器32位分为低16位BSRRL和高16位BSRRH,BSRRL配置一组IO口的16个IO口的置位状态(1),BSRRH配置复位状态(0)。是每组IO口含10个寄存器。也就是10个寄存器,一共可以控制一组GPIO的16个IO口。STM32微控制器-GPIORCCAHB1外设时钟使能寄存器(RCC_AHB1ENR)1.2GPIO相关配置寄存器端口模式寄存器(GPIOx_MODER)1.2GPIO相关配置寄存器端口输出类型寄存器(GPIOx_OTYPER)1.2GPIO相关配置寄存器端口输出速度寄存器(GPIOx_OSPEEDR)1.2GPIO相关配置寄存器端口上拉/下拉寄存器(GPIOx_PUPDR)1.2GPIO相关配置寄存器端口输入数据寄存器(GPIOx_IDR)1.2GPIO相关配置寄存器端口置位/复位寄存器(GPIOx_BSRR)GPIO端口输出数据寄存器(GPIOx_ODR)(x=A..I)STM32微控制器GPIO配置

STM32微控制器GPIO配置相关寄存器1.开启GPIO时钟

RCC_AHB1ENR寄存器 外设时钟使能寄存器2.配置GPIO工作模式

GPIOx_MODER寄存器 GPIO模式寄存器

GPIOx_OTYPER寄存器 输出类型寄存器

GPIOx_OSPEEDR寄存器 输出速度寄存器

GPIOx_PUPDR寄存器 上拉/下拉/浮空寄存器3.控制GPIO输入/输出

GPIOx_IDR寄存器 GPIO输入寄存器

GPIOx_ODR寄存器 GPIO输出寄存器 注:相关寄存器可参考STM32xxxx参考手册6.3.12STM32微控制器GPIO配置GPOI输出配置步骤:①开启GPIO时钟

RCC->AHB1ENR②配置GPIO模式寄存器

GPIOH->MODER③配置GPIO输出类型寄存器

GPIOH->OTYPER④配置GPIO上拉/下拉寄存器

GPIOH->PUPDR⑤配置GPIO速度寄存器

GPIOH->OSPEEDR6控制GPIO输入/输出GPIOx->IDR寄存器GPIOx->ODR寄存器GPIO开发任务请使用寄存器开发,通过GPIOA0、A1、A2、A3点亮led灯。硬件电路图:led灯连接GPIOA0、A1、A2、A3要点亮led灯,应使这四个IO口为低电平完成编程任务//GPIO挂在AHB1时钟总线上,开启AHB1的时钟RCC->AHB1ENR|=1;//配置输出模式GPIOA->MODER&=0xFFFFFF00;//清除GPIOA->MODER|=0xFFFFFF55;//置为01010101//输出类型GPIOA->OTYPER&=0xFFFFFF00;//输出速度GPIOA->OSPEEDR|=0xFFFFFFAA;//配置上下拉GPIOA->PUPDR&=0xFFFFFF00;GPIOA->PUPDR|=0xFFFFFF55;//控制GPIO输出GPIOA->ODR&=0xFFFFFF00; 小结STM32寄存器开发步骤:1、新建工程2、了解STM32微控制时钟框图3、了解STM32微控制器GPIO内部结构4、了解寄存器使用方法5、配置GPIO6、点亮LED灯ARM微控制器与嵌入式系统

STM32库函数开发-工程模板的建立工程模板的建立

STM32工程管理 STM32库函数工程模板创建STM32工程管理工程目录:USER-------------用户文件SYSTEM---------系统文件CORE-------------微控制器软件接口标准文件HARDWARE----外设文件FWLIB------------固件库函数USER用户文件STM32工程管理main.c 主源文件main.h主库函数stm32f4xx_it.c

相关中断源文件stm32f4xx_it.h

相关中断.h文件system_stm32f4xx.c系统源文件system_stm32f4xx.h系统.h文件stm32f4xx_conf.h外设驱动配置文件。在ST官网下载最新标准固件库(STM32F4xx_DSP_StdPeriph_Lib_V1.8.0)并解压,从中选择需要的文件,拷贝到下面的文件夹中。SYSTEM系统文件

delay文件sys文件usart文件

delay.c 延时函数文件delay.h sys.c 位带操作函数文件

sys.husart.c 串口操作函数文件

usart.hSTM32工程管理CORE微控制器软件接口标准文件

core_cm4.h

内核功能的定义core_cmFunc.h 内核核心功能接口头文件core_cmInstr.h 包含内核核心专用指令core_cmSimd.h 包含与编译器相关的处理 startup_stm32f40_41xxx.s

启动文件stm32f4xx.h

头文件STM32工程管理HARDWARE外设文件

led.c LED灯led.h

key.c 按键key.hlcd.c LCD显示屏lcd.h...... 外设文件STM32工程管理FWLIB文件incsrcmisc.h stm32f40x_rcc.h 库函数对应头文件stm32f40x_gpio.h。。。。。。misc.cstm32f40x_rcc.c 库函数源文件

stm32f40x_gpio.c。。。。。。STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\STM32F4xx_StdPeriph_DriverSTM32工程管理STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Includecore_cm4.hcore_cmFunc.hcore_cmInstr.hcore_cmSimd.hSTM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\armstartup_stm32f40_41xxx.sSTM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templatessystem_stm32f4xx.cSTM32工程管理stm32f4xx.h

system_stm32f4xx.h

STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\IncludeSTM32工程管理STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates

stm32f4xx_it.c

stm32f4xx_it.hSTM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templatesstm32f40x_conf.hSTM32工程管理STM32工程管理STM32工程管理STM32库函数工程模板创建打开KeiluVision5,新建工程,保存在USR文件夹中。选择CPU(STM32F407ZG),点击OK后可以退出,不需要选择配套固件。STM32库函数工程模板创建在所建的工程中添加文件,如图,点击manage管理工程。库函数开发STM32库函数工程模板创建库函数开发STM32库函数工程模板创建小结让我们一起开始进行库函数编程吧!工程管理—5个文件夹(从固件库中拷贝内容)工程模板的建立—建立工程,进行参数修改ARM微控制器与嵌入式系统

库函数开发-点亮led灯主讲人:景妮琴北京电子科技职业学院内容认识GPIO结构体打开时钟了解GPIO库函数了解开发板硬件电路编程方法完成任务GPIO结构体typedefstruct{uint32_tGPIO_Pin;GPIOMode_TypeDefGPIO_Mode;GPIOSpeed_TypeDefGPIO_Speed;GPIOOType_TypeDefGPIO_OType;GPIOPuPd_TypeDefGPIO_PuPd;}GPIO_InitTypeDef;GPIOMode结构体typedefenum{GPIO_Mode_IN=0x00,/*!<GPIOInputMode*/GPIO_Mode_OUT=0x01,/*!<GPIOOutputMode*/GPIO_Mode_AF=0x02,/*!<GPIOAlternatefunctionMode*/GPIO_Mode_AN=0x03/*!<GPIOAnalogMode*/}GPIOMode_TypeDef;GPIOOType结构体typedefenum{GPIO_OType_PP=0x00,GPIO_OType_OD=0x01}GPIOOType_TypeDef;GPIOSpeed结构体typedefenum{GPIO_Low_Speed=0x00,/*!<Lowspeed*/GPIO_Medium_Speed=0x01,/*!<Mediumspeed*/GPIO_Fast_Speed=0x02,/*!<Fastspeed*/GPIO_High_Speed=0x03/*!<Highspeed*/}GPIOSpeed_TypeDef;#defineGPIO_Speed_2MHzGPIO_Low_Speed#defineGPIO_Speed_25MHzGPIO_Medium_Speed#defineGPIO_Speed_50MHzGPIO_Fast_Speed#defineGPIO_Speed_100MHzGPIO_High_SpeedGPIOPuPd结构体typedefenum{GPIO_PuPd_NOPULL=0x00,GPIO_PuPd_UP=0x01,GPIO_PuPd_DOWN=0x02}GPIOPuPd_TypeDef;GPIO结构体typedefenum{Bit_RESET=0,Bit_SET}BitAction;GPIO结构体#defineGPIO_Pin_0((uint16_t)0x0001)/*Pin0selected*/#defineGPIO_Pin_1((uint16_t)0x0002)/*Pin1selected*/#defineGPIO_Pin_2((uint16_t)0x0004)/*Pin2selected*/#defineGPIO_Pin_3((uint16_t)0x0008)/*Pin3selected*/#defineGPIO_Pin_4((uint16_t)0x0010)/*Pin4selected*/#defineGPIO_Pin_5((uint16_t)0x0020)/*Pin5selected*/#defineGPIO_Pin_6((uint16_t)0x0040)/*Pin6selected*/#defineGPIO_Pin_7((uint16_t)0x0080)/*Pin7selected*/#defineGPIO_Pin_8……((uint16_t)0x0100)/*Pin8selected*/#defineGPIO_Pin_15((uint16_t)0x8000)/*Pin15selected*/#defineGPIO_Pin_All((uint16_t)0xFFFF)/*Allpinsselected*/STM32微控制器-添加头文件添加全局宏定义:USE_STDPERIPH_DRIVER#ifdefUSE_STDPERIPH_DRIVER#include"stm32f4xx_conf.h"#endif在stm32f4xx_conf.h中加载了这些库函数:STM32微控制器-添加头文件主要添加头文件:#include"stm32f4xx.h"#include"main.h"而stm32f4xx_gpio.h、stm32f4xx_rcc.h已经包含只需要在fwlib中添加源文件:stm32f4xx_gpio.c、stm32f4xx_rcc.c即可。注意:这里需要用到哪个源文件就加哪个,这里需要用GPIO点亮led灯,因此添加rcc和gpio即可。STM32微控制器-重要函数1个初始化函数:voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);2个读取输入电平函数:uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);uint16_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx);2个读取输出电平函数:uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);uint16_tGPIO_ReadOutputData(GPIO_TypeDef*GPIOx);STM32微控制器-重要函数4个设置输出电平函数:voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal);voidGPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal);STM32微控制器-库函数1个初始化函数:

voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);作用:初始化一个或者多个IO口(同一组)的工作模式,输出类型,速度以及上下拉方式。也就是一组IO口的4个配置寄存器。GPIOx->MODERGPIOx->OSPEEDRGPIOx->OTYPERGPIOx->PUPDRGPIO_PinSTM32微控制器-库函数GPIO_Init函数初始化样例:GPIO_InitTypeDef

GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//使能GPIOH时钟

//GPIOH12,H13初始化设置

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13;//LED1和LED2对应IO口

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//普通输出模式

GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//100MHz

GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉

GPIO_Init(GPIOH,&GPIO_InitStructure);//初始化GPIOH12,13可以一次初始化一个IO组下的多个IO,前提是这些IO口的配置方式一样。STM32微控制器-库函数

2个读取输入电平函数:uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:读取某个GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。例如:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5);//读取GPIOA5的输入电平STM32微控制器-库函数

2个读取输入电平函数:uint16_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx);作用:读取某组GPIO的输入电平。实际操作的也是GPIOx_IDR寄存器。例如:GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有I/O口输入电平STM32微控制器-库函数

2个读取输出电平函数:uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:读取某个GPIO的输出电平。实际操作的是GPIO_ODR寄存器。例如:

GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5);//读取GPIOA.5的输出电平STM32微控制器-库函数

2个读取输出电平函数:uint16_tGPIO_ReadOutputData(GPIO_TypeDef*GPIOx);作用:读取某组GPIO的输出电平。实际操作的是GPIO_ODR寄存器。例如:GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有I/O口输出电平STM32微控制器-库函数4个设置输出电平函数:voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:设置某个IO口输出为高电平(1)。实际操作BSRRL寄存器例如:GPIO_SetBits(GPIOA,GPIO_Pin_0);就是为GPIOA0设置高电平voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:设置某个IO口输出为低电平(0)。实际操作的BSRRH寄存器。例如:GPIO_ResetBits(GPIOA,GPIO_Pin_0);就是为GPIOA0设置低电平STM32微控制器-库函数4个设置输出电平函数:voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal);作用:为某个IO口设置BitVal的值,BitVal可以是0也可以是1。例如:GPIO_WriteBit(GPIOA,GPIO_Pin_0,1);就是为GPIOA0设置高电平voidGPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal);作用:为某组IO口设置PortVal的值。例如:GPIO_WriteBit(GPIOA,0x0100);就是为GPIOA设置0x0100的值。硬件电路任务:点亮一盏led灯。分析:1.底板上的led灯的硬件电路图如右图,我们发现led灯D1的左端接3.3V高电平,为了点亮它,需要有电流流过,也就是需要有压差,左边高电平,右边应为低电平2.如果我们用杜邦线在D1的右边连接GPIOA0,那么A0的电平应为低电平3.下面的任务就是为GPIOA0设置低电平。库函数编程工程树在工程模板的基础上完成在hardware中新建led.c和led.h文件led.c品在hardware中led.h只需要在main中#include即可led.c要实现GPIO的配置以及初始化led.h是led.c中函数的声明库函数编程-led.c在led.c中完成了一个函数的实现led_Init()在led_Init()中,定义了结构体变量GPIO_InitStructure,打开了GPIOA的时钟,完成了结构体的配置,最后进行了初始化。库函数编程-led.h在led.h中完成了一个函数的声明#ifndef__LED_H#define__LED_Hvoidled_Init(void);#endif库函数编程-main.c在main.c中加载了三个库:前两个是系统库,后面这个是用户自己建的库#include"stm32f4xx.h"#include"main.h"#include"led.h“在主函数中调用了led_Init(),这个意思是配置GPIOA0在主函数中使用GPIO_ResetBits(GPIOA,GPIO_Pin_0);为GPIOA0设置低电平库函数编程-main.c在main.c中加载了三个库:前两个是系统库,后面这个是用户自己建的库#include"stm32f4xx.h"#include"main

温馨提示

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

评论

0/150

提交评论