前情回顾

通过前面两篇文章的学习,我们已经对STM32有了一定的了解,知道了STM32单片机的基本分类和不同产品间的特点等知识,今天起围绕STM32F103xx继续深入浅出地学习单片机编程。

一、总线知识

1.1 总线

在拿到芯片资料后,第一点需要关注的就是芯片的系统架构该架构主要由驱动单元和被动单元两部分组成。

  • 驱动单元

Cortex®-M3 core的D总线和系统总线

通用DMA

  • 被动单元

内部SRAM

内部FLASH

FSMC(可连接大屏幕)

AHB 到 APB 的桥(AHB2APBx),它连接所有的 APB 外设。

如下图所示,可以从图中看到Cortex-M3 核心,该内核是ARM公司的数字电路流片的产品,数字电路也就是逻辑电路经过FPGA测试符合要求后流片产生IP(知识产权),这是ARM公司的业务。然后ARM公司通过授权把cortex内核卖给ST公司等芯片公司。芯片公司将内核通过 ICode,DCode,System三种总线,与外设进行连接(如图中的DMA、定时器、USART、I2C等)。

这里补充一下总线知识点:

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。

AHB(Advanced High-performance Bus)是AMBA 总线的一部分,而AMBA是由ARM公司研发推出的一种高级微控制器总线架构(Advanced Microcontroller Bus Architecture)。其中AMBA包含了四种不同的总线标准,分别是:

  • AHB

AHB总线互联

  • ASB
  • APB
  • AXI

其中AXI是在AMBA3.0的协议中增加的,熟悉xilinx FPGA的小伙伴们应该是比较熟悉的,可以用于ARM和FPGA的高速数据交互。

剩下的三种是在AMBA2.0协议中定义的总线标准:

  • AHB是高级高性能总线,通常用于CPU和高性能设备之间的交互,类比于现代PC的北桥。
  • ASB常用于高性能系统模块间的交互,在开发中相比剩下的几种不是非常常用。
  • APB(Advanced Peripheral Bus),外围总线的意思。该总线协议是ARM公司提出的AMBA总线结构之一,几乎已成为一种标准的片上总线,APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。APB和AHB相连接,在STM32中,APB总线分为APB1和APB2两种,分别挂载不同的设备。其中,APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM; APB2负责AD,I/O,高级TIM,串口1

1.2 时钟频率

APB1的最大时钟频率要低于APB2的最大时钟频率。

时钟频率是一个非常重要的知识点,和大家日常接触到的CPU主频一样,就可简单理解为频率越高数据传输和处理速度就越快。如下图所示,STM32单片机各个外设均工作在不同的时钟频率下,就是各个外设的工作节奏,如同大家的生活节奏。

二、STM32F103系统架构

2.1 STM32F103XX工作原理

STM32F103XX的单片机实物图如下图所示,芯片的丝印信息给出了芯片的型号,生产地址以及批次号等。型号具体含义参见《零基础入门STM32编程(一)》。

STM32F103XX的原理框图如下图所示。单片机芯片由3.6V外部电源供电,系统内核Cortex-M3连接I-bus(指令总线),将指令从存储器中取到Cortex-M3中。所以这条总线与内部的flash连着;cortex-M3通过D-bus(数据总线)从存储器中取数据,可以用于变量的载入或者debug;cortex-M3通过System总线用来加载外设或者SRAM的数据,这条总线的另一端连接着SRAM,AHB外设(包括APB1/APB2外设)。

这里提到了一个专业词汇:外设,是指STM32中除了内核Cortex-M3 CPU和总线之外的硬件电路,如下图中的普通IO、定时器(TIM)、串口(UART)、SPI等硬件电路。这里的外设进一步分为内部外设和外部外设两种。顾名思义,内部外设是ST公司已将一些常用的外部电路集成到了购买的STM32F103XX单片机电路中,方便用户直接使用;如果这些集成在单片机中的外设还不能满足用户的工作需求,那么就需要用户自己连接自己的硬件设备了,如连接摄像头和显示屏等。

从下图可以看出,一些常用外设分别挂在在APB1和APB2总线上。APB1的时钟频率限速于36MHz,主要挂载了普通TIM定时器、USART2、I2C、CAN、USB和SRAM等外设;APB2的时钟频率限速于72MHz,主要挂载了通用IO、TIM1定时器、SP1、USART1、温度传感器和ADC等外设。

2.2 内置外设的种类和数量

STM32F103XX的内置外设的组成见下表,该系列的USART口仅有2个,CAN口1个,定时器TIM共3个,麻雀虽小五脏俱全,后面的学习将围绕这些外设展开。

2.3 主要参数分析

  • 主频

STM32F103XX的最大主频为72MHz,从下图可知,系统时钟的来源分为内部8MHz时钟和外部16MHz时钟两种。此时可知不论是内部时钟还是外部时钟均没有达到72MHz,此时STM32单片机提供了一种叫做PLL(锁相环)的电路,帮助我们实现任务工作频率的愿望。

首先,讲解内部8MHz时钟电路,8MHz晶振的输出分两路,一路直接输出至SW(选择开关);另一路经分频后得到4MHz频率(8MHz除2)进入PLLMUL(锁相环)进行倍频(4MHz频率的整数倍,此时最大时钟4MHz*16=64MHz)后输出至SW(选择开关);由内核根据程序配置控制SW(选择开关)选择时钟来源,供芯片使用。

其次,分析外部时钟源电路。先看内部晶振的频率精度,见下表,从表中可知,精度为2%。

对于高精度ADC采集应用而言,内部晶振的精度远不能满足,因此STM32可接外部高精度晶振,主要可分为有源晶振和无源晶振。

常见的温补晶振如下图所示,精度有±0.25ppm、±0.6ppm、±1.0ppm、±2.0ppm等,ppm为百万分之一,可见远高于内部晶振精度。比如,12MHz晶振偏差为±20ppm,表示它的频率偏差为12×20Hz=±240Hz,即频率范围是(11999760~12000240Hz)。

无源晶振

无源晶振为2只引脚,频率精度低于温补精度。

外接晶振最大频率不超过16MHz,可分两路进入芯片,一路直接进入PLLXTPRE;另一路分频后进入芯片的PLLXTPRE,最后均输出至SRC与内部晶振汇合。

零基础入门STM32编程(三)相关推荐

  1. 零基础入门STM32编程(二)

    前情回顾 上篇文章初步认识了STM32,了解了STM32的分类及型号命名规则,本篇内容继续STM32串口编程入门学习. 一 走进STM32 STM32的单片机分为四类,主流单片机又分为五种,四类介绍参 ...

  2. 零基础入门STM32编程——GPIO(五)

    系列教程链接 HAL库编程点灯篇https://blog.csdn.net/oHaoEr/article/details/122999523 一 GPIO简介 1.1 概述 GPIO(通用输入输出端口 ...

  3. 零基础入门STM32编程(七)——定时器篇(HAL)

    前情回顾 上一篇讲解了HAL库函数点灯,初步学习了如何使用CUBE MX创建工程文件,以及文末送出了获取HAL库函数API手册方法的小福利,本篇将继续学习HAL库函数中的定时器API使用方法. 一 初 ...

  4. 一篇文章让你从JAVA零基础入门`OOP`编程12.19

    一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后,整理的文章,文中对知识点的解释仅为个人理解. 配套PPT,站点源码,等学习资料 一.预科 1.1 JAVA 介 ...

  5. 一篇文章让你从JAVA零基础入门`OOP`编程12.20

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(QQ_3336392096.png)] 一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后, ...

  6. 一期完结《一篇文章让你从JAVA零基础入门`OOP`编程》12.21

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(QQ_3336392096.jpg)] 一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后, ...

  7. python编程零基础-如何零基础入门Python编程?

    Python目前已经成为最受欢迎的编程语言之一,吸引了一大批粉丝,但是很多人在要跨入的时候犹豫了,原因竟然是觉得零基础学习Python太难了,真的是这样吗?零基础入门Python编程学习有什么好的技巧 ...

  8. 九宫怎么排列和使用_剪映零基础入门教程第三十七篇:一学就会系列之九宫格小程序配音...

    很多玩儿抖音的朋友都看过九宫格视频,但是并不是每个玩抖音的人都会制作这个九宫格视频,实际这个需要借助小工具来帮忙,而常用抖音的朋友们会对剪映更加熟悉一些,且九宫格视频在剪映内的制作方式则比较简单.那么 ...

  9. Java好学吗?零基础入门Java,三个就业方向实现月入过万!

    Java好学吗?零基础入门Java容易吗?据统计,这是很多人学习前最常问也是最关心的问题之一. 不可否认,大家在开始接受新事物的时候都会陷入困境,但学习是循序渐进的,零基础入门Java到底难不难,只有 ...

最新文章

  1. k8s系列---部署集群
  2. solrCloud源码分析之CloudSolrClient
  3. ML之FE:利用FE特征工程(单个特征及其与标签关系的可视化)对RentListingInquries(Kaggle竞赛)数据集实现房屋感兴趣程度的多分类预测
  4. tomcat启动时提示Failed to initialize end point associated with ProtocolHandler [http-apr-8080]
  5. 输入输出重定向和管道
  6. 无处 不在的无线智能——6g 的关键驱动与研究挑战_一文看懂什么是 6G
  7. [导入]C#中WebService里的回车符\r丢失问题
  8. netword localhost与 127.0.0.1 与 ::1 与 0.0.0.0 区别
  9. 巴克码信号处理的计算机仿真,单码道绝对编码信号处理建模与仿真
  10. [超详细保姆教程]Python3.8 实现 Paillier算法
  11. RS-232C接口定义(DB9)
  12. 首个单季度盈利,ARPU增速却持续下滑,拼多多已埋下未来隐忧
  13. 一条Insert语句怎么优化和解构
  14. python发微博头条文章_Python脚本实现自动发带图的微博
  15. Ubuntu 16.04 显示器分辨率低
  16. 无线电通信相关重要指标测试
  17. ThinkPad E450 uefi模式下移动硬盘安装Ubuntu14.04(本机硬盘是win10)
  18. 述职报告(2017-2018年度)
  19. Oracle存储过程基本语法和基础教程
  20. 云场景实践研究第50期:咕咚

热门文章

  1. python 数据结构与算法(第一篇)
  2. 团队作业8——Beta 阶段冲刺2rd day
  3. TensorFlow学习笔记Day2-综述
  4. go安装-window环境
  5. Integer比较大小的范围
  6. jsp引入html,jsp如何引入css样式?
  7. easyrecovery2022软件成功恢复被误删掉的文件
  8. Mac IDEA彻底删除项目详解
  9. 等保测评--物联网安全扩展要求
  10. 深度学习论文: A ConvNet for the 2020s及其PyTorch实现