STM32F103xx学习笔记(一)-系统架构,GPIO,时钟系统,中断系统。-基本框架尚硅谷SEM32视频教程

一、系统架构

在这里插入图片描述

1.被动单元:被动传输数据

  1. SRAM:存储程序的变量,RAM是易失性的,关机或重启时,RAM中的所有数据都会丢失。
  2. FLASH:存储下载的程序,程序的常量,长期存储,即使在设备关机时,数据也不会丢失。在这里,容量比SRAM大,比SRM成本低
  3. AHB到APBx的桥接:高速外设总线APB2的速度为72MHz,低速外设APB1的速度为36MHz。

2.主动(驱动)单元:发出控制信号。

  1. Cortex-M3,D-Bus数据总线:从FLASH加载常量和调试访问。
  2. S-Bus
  3. DMA1(direct memory access直接内存访问):连接到总线矩阵上,降低CPU负担,建立通道控制内存外设的数据流动。

3.其他单元

  1. ICode 指令总线:传输指令专用通道,不走总线矩阵。
  2. FSMC (flexible static memory controller):扩展SRAM,flash

二、GPIO外设

在这里插入图片描述

  1. 引脚最大翻转速度为50MHz。
  2. 通用开漏模式下,能够输出低电平和高电平(必须上拉电阻,因为开漏输出实际是输出高阻态)。
  3. 共用信号线的场合只能使用开漏模式(推挽会出现短路情况,而开漏具有线与的逻辑效果)。
  4. 对于需要在复用情况下变换模式(输出,输入间切换)的引脚,设置成复用输出模式即可。

1.相关寄存器

  1. 2个32位配置寄存器GPIOx_CRL和GPIOx_CRH(configuration register):配置每一位工作模式和时钟速率
  2. 2个32位数据寄存器GPIOx_IDR和GPIOx_ODR
  3. 1个32位置位/复位寄存器:0-16位负责分别为16各引脚置0(位置1时),17-31位负责分别为16各引脚置1(位置1时),当两者冲突时,置1操作优先。
  4. 1个16位复位寄存器:和上面的本质上是一样的
  5. 1个32位锁定寄存器:锁定配置寄存器
  • CR寄存器配置CNF位时发现:10对应上拉/下拉模式,那么如何确定是下拉还是上拉呢?方法设置完CR寄存器后,设置对应位ODR寄存器,如果置1则上拉,置0则下拉。

三、时钟系统

在这里插入图片描述

  1. 边上方框代表引脚,OSC是振荡器的缩写,OSC_IN和OSC_OUT连接外部晶振,MCO:给外部传输时钟信号。HSE OSC:高 速 外部 振荡器(一般通过外部8MHz时钟九倍频得到72MHz)。
  2. 一般RC振荡器不稳定,优先用外部。
  3. 使用多个时钟,分配始终资源更合理,功耗更小。
  4. 最终产生两个重要的时钟:系统时钟(一般使用倍频得到的时钟),实时时钟RTC:一啊用外部低速时钟。
    时钟的应用:就是图片右边使用时钟的要求或者说配置。
    低速外部时钟不能驱动系统时钟

四、HAL库开发 Hardware Abstraction Layer 硬件抽象层

HAL是基于BSD许可协议的开源代码,可用作商业用途,一致性强。
标准库中的CMSISI coterx microcontroller software interface standard,是跟供应商无关的硬件抽象层,这来源于ARM。

  1. STM32CubeMX提供了一个图形化的配置窗口(清晰的时钟树图形化,以及引脚复用功能的快速选择···),创建项目时可以生成配置文件。
  2. HAL库函数隐藏了底层寄存器操作,更易读,类似Arduino?

五、中断系统

意义:避免轮询,解放CPU。
Cortex-M3内核支持256个中断,16个内核中断(异常),240个外部中断,优先级可以设置256级。
Stm32有84个中断,16个内核中断,68个可屏蔽中断。
Stm32F103有70个中断,10个内核中断,60个可编程中断。
中断向量表
每一个中断对应一个地址,实际就是对应程序的地址。
优先级为复述代表不能设置优先级

1.中断体系架构

NCIC嵌套向量中断控制器:管理所有中断请求,排好优先级
中断来源:

  1. 内核其他控件:系统滴答计时器,复位。。。
  2. 片上外设:串口,定时器,i2c。。。
  3. 外部中断:GPIO,AFIO引脚复用选择器对于GPIOx 这7组16位寄存器,16位引脚7合1引脚合并→EXTI外部中断空控制器确定7合1某一位信号从哪个x来,再交给NVIC,除了16个这样的外部中断还有特定的PVD电源检测线,RTC闹钟线,USB检测线,以太网唤醒线。共20个外部中断线。
    在这里插入图片描述
    优先级分两类:抢先优先级和响应优先级。两种不同场景。

2.NVIC nested vectored interrupt controller 嵌套向量中断控制器

决定哪个中断的处理程序交给CPU执行
20个外部中断交给EXTI控制,然后交给NVIC,其他直接交给NVIC。

优先级分为抢占优先级响应优先级,后者是指一起等待时的优先级。系统里对应英文为group priority 和 subpriority。
在这里插入图片描述
优先级组和子优先级划分
库提供了配置分组模式的函数:

NVIC_SetPriorityGroupin(3);  // 配置分组模式为全为抢占优先级

3.EXIT external interrupt 外部中断原理和寄存器

在这里插入图片描述
输入线就是引脚。

软件中断事件触发器:可以用软件模拟一个中断。
请求挂起寄存器:判断是否产生中断的状态寄存器,通过硬件进行置位,送出中断信号后还要清空。
中断屏蔽寄存器:是否屏蔽中断。

下方部分是事件处理方式:
原理差不多,不需要挂起,作为事件,检查是否被屏蔽,然后直接交给内核,这是一种硬件处理,不用运行中断程序。虽然是硬件处理,但是需要对应的硬件电路。

4.GPIO触发中断的相关寄存器

AFIO引脚复用选择器中的 AFIO_EXTICRx(x=4)外部中断配置寄存器

在这里插入图片描述
四个寄存器保留低16位,用4位控制一根中断线,一共控制16跟中断线。
在这里插入图片描述

EXTI的上升沿触发选择寄存器EXTI_RTSR

在这里插入图片描述
对应的20跟外部中断线

EXTI的中断屏蔽寄存器

在这里插入图片描述
置1,架构图里会与请求信号做一个与。

NVIC配置

设置优先级组,配置优先级

中断处理程序

第一步一定要往EXTI的挂起寄存器线清除中断标志
在这里插入图片描述
注意:该位是硬件置位,该位写1进行清除
中断服务程序并不能自由定义,根据头文件(汇编文件)中的定义。例如:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值