目录第4章SSTM32嵌入式微控制器基础4.1STM32系列微控制器简介4.1.1与51单片机的区别4.1.2分类4.1.3与单片机、嵌入式、ARM的关系4.2STM32的基本架构和基本原理42.1ARMCortex-M3系列处理器42.2STM32F103系列微控制器842.3STM32的时钟树13174.3STM32程序开发的模式4.3.1基于寄存器的开发模式174.3.2基于固件库的开发模式184.3.3基于操作系统的开发模式18.204.3.43种开发模式的选用建议.204.3.5库函数与寄存器开发的关系4.3.6.21HAL库和标准库选择214.4学习STM32需要工具和平台214.4.1J-LINK仿真器.224.4.1KEIL环境下仿真器及调试环境的设置4.4.2图形化工程模板配置平台STM32CubeMX5.2.1.284.4.3学习STM32的方法.46.504.5STM32的工程模板504.5.1STM32微控制器工程模板简介.524.5.2MDK编译环境下的C语言数据类型第5章STM32微控制器GPIO应用基础.53535.1GPIO的硬件结构和功能,535.1.1GPIO硬件结构5.1.2GPIO输入功能.54.555.1.3GPIO输出功能5.1.4GPIO复用功能、速度选择与钳位保护.5852.59GPIO寄存器和库函数及工程模板的形成595.2.1GPIO寄存器52.2.61GPIO(库)函数52.3库函数和寄存器的关系.615.2.44工程模板的初步形成..61.625.3GPIO输出操作.625.3.1基本输出操作举例一字节输出与位输出.645.3.2扩展输出操作举例一流水灯5.3.3扩展输出操作举例一8段LED静态与动态显示.66.715.4输入操作5.4.1闸刀型开关输入信号.715.4.2单个按钮型开关输入信号.735.4.3.75多个按钮型开关输入信号一键盘本章小结.81.82实验与设计.83第6章STM32微控制器外部中断应用基础..836.1Cortex-M3的异常和中断...836.1.1异常和中断的概念6.1.2嵌套向量中断控制器NVIC.841
1 目 录 第4章 STM32嵌入式微控制器基础.4 4.1 STM32系列微控制器简介.4 4.1.1 与51单片机的区别.4 4.1.2 分类.5 4.1.3 与单片机、嵌入式、ARM的关系.6 4.2 STM32的基本架构和基本原理.7 4.2.1 ARM Cortex-M3系列处理器.7 4.2.2 STM32F103系列微控制器.8 4.2.3 STM32的时钟树.13 4.3 STM32程序开发的模式.17 4.3.1 基于寄存器的开发模式.17 4.3.2 基于固件库的开发模式.18 4.3.3 基于操作系统的开发模式.18 4.3.4 3种开发模式的选用建议.20 4.3.5 库函数与寄存器开发的关系.20 4.3.6 HAL库和标准库选择.21 4.4 学习STM32需要工具和平台.21 4.4.1 J-LINK仿真器.21 4.4.1 KEIL环境下仿真器及调试环境的设置.22 4.4.2 图形化工程模板配置平台STM32CubeMX5.2.1.28 4.4.3 学习STM32的方法.46 4.5 STM32的工程模板.50 4.5.1 STM32微控制器工程模板简介.50 4.5.2 MDK编译环境下的C语言数据类型.52 第5章 STM32微控制器GPIO应用基础.53 5.1 GPIO的硬件结构和功能.53 5.1.1 GPIO硬件结构.53 5.1.2 GPIO输入功能.54 5.1.3 GPIO输出功能.55 5.1.4 GPIO复用功能、速度选择与钳位保护.58 5.2 GPIO寄存器和库函数及工程模板的形成.59 5.2.1 GPIO寄存器.59 5.2.2 GPIO(库)函数.61 5.2.3 库函数和寄存器的关系.61 5.2.4 工程模板的初步形成.61 5.3 GPIO输出操作.62 5.3.1 基本输出操作举例—字节输出与位输出.62 5.3.2 扩展输出操作举例—流水灯.64 5.3.3 扩展输出操作举例—8段LED静态与动态显示.66 5.4 输入操作.71 5.4.1 闸刀型开关输入信号.71 5.4.2 单个按钮型开关输入信号.73 5.4.3 多个按钮型开关输入信号—键盘.75 本章小结.81 实验与设计.82 第6章 STM32微控制器外部中断应用基础.83 6.1 Cortex-M3的异常和中断.83 6.1.1 异常和中断的概念.83 6.1.2 嵌套向量中断控制器NVIC.84
6.1.3中断通道.85.856.2STM32微控制器的EXTI..8562.1中断与事件62.2EXTI功能框图.8662.3EXTI中断通道和中断源.886.2.4EXTI有关的寄存器和库函数..88..896.3STM32外部中断举例6.3.1EXTI程序设计的一般步骤..89中断函数..896.3.1.906.3.2外部中断工程模板的建立..926.3.3外部中断示例6.4实验与设计.94本章小结.94.96第7章STM32微控制器的定时器应用基础7.1认识STM32微控制器的定时器..967.1.1STM32定时器概述.967.1.2计数模式.97.10072STM32微控制器的通用定时器7.2.1通用定时器TIMx功能.1007.2.2通用定时器TIMx结构.10172.3通用定时器的寄存器和库函数.11072.4通用定时器/计数器的应用举例1111147.3RTC的功能及结构,7.3.1RTC的基木功能.1147.3.2RTC的内部结构1157.3.3115RTC应用实例7.4系统时钟SysTick简介116第8章USART原理及应用1188.1端口重映射1188.2USART功能和结构.11982.1USART功能12082.2USART结构1211228.2.3STM32的USART应用的基本要领.1248.3USART顿格式8.7USART寄存器与库函数.1248.7.1USART寄存器.1248.7.2USART库函数125.126第9章ADC与DAC原理及应用9.1ADC的功能及结构.12692.128ADC的工作模式9.5ADC的寄存器和库函数1309.7131应用实例9.8STM32的DAC1319.8.1DAC概述1319.8.2DAC的配置要领.1329.8.3.132DAC应用实例.思考与扩展.134附录A ASCII码字符表.135附录BProteus常用分离器件名称.135参考文献:.1362
2 6.1.3 中断通道.85 6.2 STM32微控制器的EXTI.85 6.2.1 中断与事件.85 6.2.2 EXTI功能框图.86 6.2.3 EXTI中断通道和中断源.88 6.2.4 EXTI有关的寄存器和库函数.88 6.3 STM32外部中断举例.89 6.3.1 EXTI程序设计的一般步骤.89 6.3.1 中断函数.89 6.3.2 外部中断工程模板的建立.90 6.3.3 外部中断示例.92 6.4 实验与设计.94 本 章 小 结.94 第7章 STM32微控制器的定时器应用基础.96 7.1 认识STM32微控制器的定时器.96 7.1.1 STM32定时器概述.96 7.1.2 计数模式.97 7.2 STM32微控制器的通用定时器.100 7.2.1 通用定时器TIMx功能.100 7.2.2 通用定时器TIMx结构.101 7.2.3 通用定时器的寄存器和库函数.110 7.2.4 通用定时器/计数器的应用举例.111 7.3 RTC的功能及结构.114 7.3.1 RTC的基木功能.114 7.3.2 RTC的内部结构.115 7.3.3 RTC应用实例.115 7.4 系统时钟SysTick简介.116 第8章 USART原理及应用.118 8.1 端口重映射.118 8.2 USART功能和结构.119 8.2.1 USART功能.120 8.2.2 USART结构.121 8.2.3 STM32的USART应用的基本要领.122 8.3 USART帧格式 .124 8.7 USART寄存器与库函数.124 8.7.1 USART寄存器.124 8.7.2 USART库函数.125 第9章 ADC与DAC原理及应用.126 9.1 ADC的功能及结构.126 9.2 ADC的工作模式.128 9.5 ADC的寄存器和库函数.130 9.7 应用实例.131 9.8 STM32的DAC.131 9.8.1 DAC概述.131 9.8.2 DAC的配置要领.132 9.8.3 DAC应用实例.132 思考与扩展.134 附录A ASCII码字符表.135 附录B Proteus常用分离器件名称.135 参考文献:.136
m
3
第4章STM32嵌入式微控制器基础从8位单片机转到基于ARM的32位微控制器STM32,这个过程需要通过合适的方法跨越。由于STM32的功能多,其原理又与传统的8位单片机(主要是51系列)完全不同,所以本章任务重点是讨论学习STM32微控制器的基本问题。包括STM32微控制器的认识、开发需要的硬件及软件环境、有关软件的使用等。4.1STM32系列微控制器简介4.1.1与51单片机的区别1.认识STM32微控制器STM32从字面上来理解,ST是意法半导体,M是Microelectronics的缩写,32表示32位,合起来理解,STM32就是指ST公司开发的32位微控制器。意法半导体(ST)集团于1988年6月成立,是由意大利的SGS微电子公司和法国ThomSon半导体公司合并而成。1998年5月,SGS-THOMSONMicroelectronics将公司名称改为意法半导体有限公司,是世界最大的半导体公司之一。STM32就是基于Cortex-M3内核的微控制器。它包括Cortex-M3内核、存储器、外设等。Cortex-M3内核通过接口总线的形式挂载了储存器、外设、中断等组成一个MCU,如图4-1所示。nnnnnnnnnnnnnnnnn0000UU0U00UUUU000UCortex-M3芯片LO由ARM设计调试系统Cortex-M3内核品内部总线Eht/bulebblog.csd由芯片制造商外设存储器设计开发时钟和复位1/0O0UOUUOUUOOUUU图4-1STM32微控制器示意图STM32微控制器的内核是基于ARM公司的Cortex-M3微控制器内核。ARM公司于2006年推出了Cortex-M3微处理器核,针对微控制器(MCU)领域。Cortex-M3采用的V7指令集,它的速度比ARM7快三分之一,功耗低四分之三,并且能实现更小芯片面积,利于将更多功能整合4
4 第4章 STM32嵌入式微控制器基础 从8位单片机转到基于ARM的32位微控制器STM32,这个过程需要通过合适的方法跨越。 由于STM32的功能多,其原理又与传统的8位单片机(主要是51系列)完全不同,所以本章 任务重点是讨论学习STM32微控制器的基本问题。包括STM32微控制器的认识、开发需要的 硬件及软件环境、有关软件的使用等。 4.1 STM32系列微控制器简介 4.1.1 与51单片机的区别 1.认识STM32微控制器 STM32从字面上来理解, ST是意法半导体,M是Microelectronics的缩写,32表示32 位,合起来理解, STM32就是指ST公司开发的32位微控制器。 意法半导体(ST)集团于1988年6月成立,是由意大利的SGS微电子公司和法国Thomson 半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半 导体有限公司,是世界最大的半导体公司之一。 STM32就是基于Cortex-M3内核的微控制器。它包括Cortex-M3内核、存储器、外设等。 Cortex-M3内核通过接口总线的形式挂载了储存器、外设、中断等组成一个MCU,如图4-1所 示。 图4-1 STM32微控制器示意图 STM32微控制器的内核是基于ARM公司的Cortex-M3微控制器内核。ARM公司于2006年推 出了Cortex-M3微处理器核,针对微控制器(MCU)领域。Cortex-M3采用的V7指令集,它的速 度比ARM7快三分之一,功耗低四分之三,并且能实现更小芯片面积,利于将更多功能整合
在更小的芯片尺寸中。STM32属于一个微控制器,自带了各种常用通信接口,比如USART、I2C、SPI等,可接非常多的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有STM32的身影,比如智能手环,微型四轴飞行器、平衡车、移动POST机、智能电饭锅、3D打印机等等。STM32微控制器主要应用于:低成本单片机、汽车电子、数据通信、工业控制、消费类电子产品等。2.与51单片机的区别51单片机是对所有兼容Inte18031指令系统的单片机的统称。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。STM32系列微控制器基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。两者的主要区别如下:(1)内核:51单片机采用的是51Core、8位CPU、2MHzMax(分频后):STM32采用的是ARMCortex-M3,32位CPU、72MHz。(2)外部地址扩展:51单片机最大64K字节:STM32有4G字节。(3)片内储存器:51单片机片内ROM2K-64K字节,RAM可以128字节--1K字节;STM32的片内ROM为20K-1M字节,RAM有8K-256K字节。(3)外设:51单片机有4个8位的并行口、2个定时器(52有3个)、一个串行口;STM32却拥有多个并行口、串行口、AD、DA、定时器、、看门狗、CRC、DMA、IC、SPI、CAN、USART等众多外设,它几乎集成了所有测控领域的所有需要的功能模块。(4)对单片机的编程操作:51单片机在编程时都是直接操作寄存器,没有库函数的支持,由于51单片机功能有限,所以对寄存器的设置也比较简单:STM32微控制器功能强大,引脚复用较多,在设置寄存器时比较麻烦,但STM32有官方的库函数支持,就可以弱化寄存器的设置。(5)操作系统:51单片机连RTOS(RealTimeOperationSystem实时多任务操作系统)都很难能跑;STM32采用的是uClinux(u表示Micro,C表示Control,所以uClinux就是Micro-Control-Linux,字面上的理解就是“针对微控制领域而设计的Linux系统”)、uC/OS(实时操作系统内核)。总的来说,51有51的轻巧,STM32有STM32的强大。首先51学习入门最简单,功能少,使用比较方便,但是速度、功能都没有STM32强大。STM32是32位的,外围接口丰富,但是使用复杂,入门学习就有点难度了。4.1.2分类STM32有很多系列,可以满足市场的各种需求,从内核上分有Cortex-MO、M3、M4和M7这几种,每个内核又大概分为主流、高性能和低功耗。5
5 在更小的芯片尺寸中。 STM32属于一个微控制器,自带了各种常用通信接口,比如 USART、I2C、SPI等,可接 非常多的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有 STM32 的身影,比如智能手环,微型四轴飞行器、平衡车、移动POST机、智能电饭锅、3D 打印机等等。 STM32微控制器主要应用于:低成本单片机、汽车电子、数据通信、工业控制、消费类 电子产品等。 2.与51单片机的区别 51单片机是对所有兼容Intel 8031指令系统的单片机的统称。51单片机是基础入门的 一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能 力。 STM32系列微控制器基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的 ARM Cortex-M3内核。 两者的主要区别如下: (1)内核:51单片机采用的是51 Core、8位CPU、2MHz Max(分频后);STM32采用的 是ARM Cortex-M3,32位CPU、72MHz。 (2)外部地址扩展:51单片机最大64K字节;STM32有4G字节。 (3)片内储存器:51单片机片内ROM2K-64K字节,RAM可以128字节-1K字节;STM32的 片内ROM为20K-1M字节,RAM有8K-256K字节。 (3)外设:51单片机有4个8位的并行口、2个定时器(52有3个)、一个串行口; STM32却拥有多个并行口、串行口、AD、DA、定时器、看门狗、CRC、DMA、I 2 C、SPI、 CAN、USART等众多外设,它几乎集成了所有测控领域的所有需要的功能模块。 (4)对单片机的编程操作:51单片机在编程时都是直接操作寄存器,没有库函数的支 持,由于51单片机功能有限,所以对寄存器的设置也比较简单;STM32微控制器功能强大, 引脚复用较多,在设置寄存器时比较麻烦,但STM32有官方的库函数支持,就可以弱化寄存 器的设置。 (5)操作系统:51单片机连RTOS(Real Time Operation System 实时多任务操作系 统)都很难能跑;STM32采用的是uClinux(u表示Micro,C表示Control,所以uClinux就是 Micro-Control-Linux,字面上的理解就是“针对微控制领域而设计的Linux系统”)、 uC/OS(实时操作系统内核)。 总的来说,51有51的轻巧,STM32有STM32的强大。首先51学习入门最简单,功能少, 使用比较方便,但是速度、功能都没有STM32强大。STM32是32位的,外围接口丰富,但是 使用复杂,入门学习就有点难度了。 4.1.2 分类 STM32有很多系列,可以满足市场的各种需求,从内核上分有 Cortex-M0、 M3、 M4和 M7这几种,每个内核又大概分为主流、高性能和低功耗