单片机(裸机方向-持续更新)

本文详细介绍了STM32的时钟初始化、GPIO设置、串口配置、中断应用以及定时器和DMA的使用。从时钟源选择到各外设时钟的开启,再到GPIO引脚的复用模式设置,每个步骤都有清晰的参数配置和执行过程。此外,还涉及了串口通信参数、中断服务函数编写以及DMA数据传输的实现。对于IIC协议,文章解释了其工作原理和数据传输流程。整个内容旨在帮助读者掌握STM32的底层硬件操作。
摘要由CSDN通过智能技术生成

时钟初始化

  • 时钟晶振设置
    • 设置晶振使用源(如HSE/HSI/LSE/LSI/MSI等)
    • 是否开启PLL,PLL来源,M·N·P·Q·R参数(如果不需要PLL也可以不用设置)
    • 执行上述参数设置
  • 设置时钟
    • 是否开启APB,AHB,SYSCLK时钟
    • 设置SYSCLK时钟来源,APB,AHB总线时钟分频系数
    • 执行上述参数设置

GPIO引脚设置及使用

  • 通用型设置
    • 开启该引脚口对应的时钟
    • 设置引脚口,使用的模式,传输速率
    • 执行上述参数设置
  • 复用性设置

  • 使用
    • 通用型
      • 置高/低电平,使用库函数HAL_GPIO_WritePin,函数接口为GPIO区域,GPIO引脚口,置高/低。
      • 反转电平
    • 复用型

串口模块设置及使用

  • 串口参数设置
    • 串口号,波特率
    • 模式(接收,发送或既接收又发送)
    • 字长,停止位,奇偶校验位
    • 硬件检查
  • 串口引脚复用设置
    • 串口引脚时钟使能
    • 串口模块使能
    • 串口引脚设置为复用模式(设置引脚口,复用模式(复用输出和复用选项),传输速率,上拉/下拉/开漏)
  • 执行上述设置
  • 串口使用
    • 发送
      • 调用库函数HAL_UART_Transmit,函数接口为串口句柄,发送的数据,数据长度,延时时间。
    • 接收
      +

中断设置及使用

  • 外部中断设置及使用
    • 基本知识
      • STM32每个引脚都可以设置为中断,但是中断是有限的,因此GPIOA-E的0号引脚都对应着0号中断线,A~E的1号引脚都对应1号中断线;
      • GPIOA和GPIOD的0号引脚都可以设置为中断模式,但是它们不能同时出现中断模式(最好不要,没有具体操作过)
    • 设置及使用
      • 外部中断引脚复用设置
        • 使能引脚时钟,设置引脚口,上下拉模式,速度
        • 设置引脚中断触发模式(上升沿触发/下降沿/上升和下降沿)
        • 执行上述参数设置
      • 设置抢占和响应优先级
        +备注:引脚与中断线名称是固定的(可以在"stm32L475xx.h"中找到),一般情况是
        • EXTI0_IRQn -> 引脚0号线;EXTI1_IRQn -> 引脚1号线,…,直到第五个引脚
        • EXTI9_5_IRQn-> 引脚5-9号线;EXTI15_10_IRQn-> 引脚10-15号线;
      • 使能中断
      • 编写中断服务函数
        • 当出现中断时,会自动执行中断服务函数,因此中断服务函数名称不能随意设定;
        • 中断服务函数是根据实际需求进行编写,注意先判断中断标志位,有标志位则清除中断标志位并执行中断内容,否则跳出中断;
        • 注意中断时间不能太长,否则会宕机;
        • STM32例程中是先调用GPIO中断服务函数,服务函数再调用GPIO中断的函数,GPIO中断函数中先清除中断标志位再调用GPIO中断回调函数,GPIO中断回调函数执行中断内容(我觉得这个过程有些复杂)。

定时器设置及使用

  • 计数定时器的基本使用
    • 基本知识
      • 通过给定时器设置一个时间周期,当到达该时间周期,则触发定时器中断,执行“清除定时器中断标志位”,“定时器清零”和“执行中断服务函数中的内容”。
      • 设置时间周期主要依靠“自动重装载寄存器ARR”和“预分频器PSC”
      • 定时周期时间 = (ARR+1)*(PSC+1)/Tclk,其中ARR为自动装载寄存器值(Period),PSC为预分频器值(Prescaler),Tclk为该定时器所在时钟周期频率
      • 如ARR=4999,PSC=7999,Tclk=80M,则定时周期为0.5秒。
    • 设置及使用
      • TIM定时器的初始化并执行,主要有使用的定时器X,预分频系数PSC,自动重装载值ADD,计数模式(向上/向下),时钟分频系数(这个参数与输入滤波有关,与普通的定时器计数无关);
      • 重写TIM_MSPInit()函数,函数内部主要使能定时器时钟,设置定时器中断优先级并开启中断;
      • 使能并开启定时器中断(注意,这里有两次开启定时器中断,两个中断并不是一种类型)
      • 编写中断服务函数和回调函数

DMA设置及使用

  • DMA的基本使用
    • 基本知识
      • DMA是一个控制器,可以在不占用CPU的情况下控制总线实现数据从内存到外设/从外设到内存/内存到内存。也就是数据搬运工,减轻CPU的负担。
    • 普通设置(没有使用中断)及使用
      • DMA初始化
        • 使能DMA模块时钟;
        • 将DMA与需要使用的外设联系起来(STM32L4系列的芯片需要);
        • 设置 DMA通道、DMA请求选项(请求选项可能和请求发送电平次数有关)、数据传输方向、外设地址是否使用增量模式、内存地址是否使用增量模式(增量模式指的是在每次传送后+1,移动至下一个地址)、外设数据长度、内存数据长度、普通/循环模式(传输一次/循环传输,当为循环传输时,时间周期与外设有关)、DMA优先级(不同的模块使用DMA发生竞争是通过优先级决定先后顺序)
        • 使能执行上述设置
      • DMA使用
        • 使用相关函数使用DMA进行数据传输(如串口使用DMA的函数为“ HAL_UART_Transmit_DMA() ”:这个函数的调用还是需要CPU,函数执行会打开串口DMA并使用DMA进行数据传输),
        • DMA执行数据传输,CPU继续干其他的事情
        • 执行完成后,DMA返回一个标志位(这里可以跳入中断,但是中断部分我还没做,因此初始化部分没有加入与DMA中断有关的设置笔记),CPU清除传输完成的标志位,可以关闭串口DMA(这里以DMA举例)。

IIC

  • IIC协议说明
    • IIC只有两个引脚线,分别为时钟控制线和数据控制线SCL和SDA
    • 开始传输数据时,SCL为高电平,SDA由高电平变为低电平,结束数据传输时,SCL为高电平,SDA由低电平变为高电平;
    • 进行数据传输时,从MSB(高位)开始传输,SCL为高电平,从设备开始读取SDA的电平数据,SCL为低电平时,从设备不读取SDA可改变电平以等待下一次的读取;
    • 每8个数据位后,SDA线由接收方控制,接收方将SDA置低,则表示接收成功(ACK信号),否则置高为接收不成功;
    • IIC可支持一对多(一主多从),实现原理是在开始信号后为7位设备地址(设备地址需要看芯片厂商,一般高四位是固定的,低四位通过芯片上管脚电压高低来实现不同地址名)从而实现和不同设备通信
      IIC流程说明(源于韦东山老师相关视频课程)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值