欢迎光临散文网 会员登陆 & 注册

STM32入门教程-2023持续更新中

2023-03-08 21:44 作者:废物学短  | 我要投稿

持续更新中…………

一些小知识(为方便查找)

一、VCC、VDD、VEE、VSS

  1. 一般来说VCC=模拟电源,VDD=数字电源,VSS=数字地,VEE=负电源。
  2. 有些IC既有VDD引脚又有VCC引脚,说明这种器件自身带有电压转换功能。
  3. 对于数字电路来说,VCC是电路的供电电压,VDD是芯片的工作电压(通常Vcc>Vdd),VSS是接地点。
  4. 在场效应管(或COMS器件)中,VDD为漏极,VSS为源极,VDD和VSS指的是元件引脚,而不表示供电电压。

二、8种输入输出模式

1. GPIO_MODE_AIN 模拟输入

2. GPIO_MODE_IN_FLOATING 浮空输入

3. GPIO_MODE_IPD 下拉输入

4. GPIO_MODE_IPU 上拉输入

5. GPIO-MODE_OUT_OD 开漏输出

6. GPIO_MODE_OUT_PP 推挽输出

7. GPIO_MODE_AF_OD 复用开漏输出

8. GOIO_MODE_AF_PP 复用推挽输出

https://zhuanlan.zhihu.com/p/113367004



桥接:是指在两个网络之间搭一个桥,将两个网络连接到一块的意思。

  • 
    [2-1] 软件安装 P3 - 05:48
    
  • 
    [2-1] 软件安装 P3 - 07:22
    
  • 
    [2-1] 软件安装 P3 - 13:42
    

stm32库

STM32的开发方式主要有:

  1. 基于寄存器的方式
  2. 基手标准库(也就是库函数的方式)
  3. 本课程
  4. 基手HAL库的方式


[2-2] 新建工程 P4 - 02:11



[2-2] 新建工程 P4 - 13:02


************************

  • //************
  • 点击魔法棒,target->ARMCompiler选择V5.06
  • 解决办法2:魔法棒-->target-->ARM Compiler-->Use default compiler version 5

  • 这里up少讲了个东西,点击setting之后的第一个debug页面里面的port要改成sw,不然下载不成功

  • 自动补全代码设置:点击Edit>Configuration>Text Completion>勾选Symbols after最后重新打开Keil就可以了

3-x GPIO


[3-1] GPIO输出 P5 - 07:11



[3-1] GPIO输出 P5 - 19:09


------------------------------------------------------------


[3-2] LED闪烁&LED流水灯&蜂鸣器 P6 - 09:17


  1. 第一步:使用RCC开启GPIO的时钟
  2. 第三步,使用GPI_Init函数初始化GPlO
  3. 第三步,使用输出或者输入的函数控制GPIO口

函数:

  1. RCC


[3-2] LED闪烁&LED流水灯&蜂鸣器 P6 - 10:12


  • RCC_APB2PeriphClockCmd();

  1. GPIO输出


[3-2] LED闪烁&LED流水灯&蜂鸣器 P6 - 11:51



魔术棒->C/C++->勾选C99mode,就可以在中间定义了

------------------------------------------------------------


[3-3] GPIO输入 P7 - 04:59



宏定义#define、typedef、结构体struct、枚举enum


[3-3] GPIO输入 P7 - 37:47


------------------------------------------------------------

  • GPIO输入


[3-4] 按键控制LED&光敏传感器控制蜂鸣器 P8 - 15:29


GPIO_ReadInputDataBit();

------------------------------------------------------------


[4-1] OLED调试工具 P9 - 10:59


开漏输出

GPIO_Mode_Out_OD 普通开漏输出,驱动能力不足,无法显示,更改为GPIO_Mode_Out_PP(推挽输出),正常显示

因为标准I2C是有上拉电阻的,没有信号总线高电平,所以要配置成开漏

-----------------------------------------------------------

keil的调试模式


[4-2] OLED显示屏 P10 - 11:47


-----------------EXTI外部中断-----------------


[5-1] EXTI外部中断 P11 - 11:49


  • 相同的Pin不能同时触发中断

或、与、非

数据选择器

-----------------------------------------------------------


[5-1] EXTI外部中断 P11 - 29:48


配置外部中断

一、对射红外传感器

  1. 第一步,配置RCC,把我们这里涉及的外设的时钟都打开
  2. RCC_APB2PeriphClockCmd( //目前只有AFIO需要开启AFIO
  3. 第三步,配置GPIO,选择我们的端口为输入模式
  4. 第三步,配置AFIO,选择我们用的这一路GPIO,连接到后面的EXTI
  5. AFIO外设 AFIO中断引脚选择器10:10
  6. 第四步,配置EXTI,选择边沿触发方式,比如上升沿、下降沿或者双边沿
  7. EXTI EXTI边沿检测及控制 14:12
  8. 第五步,配置NVIC,给我们这个中断选择一个合适的优先级
  9. NVIC 分组管理 “叫号系统”



  • AFIO //在GPIO文件中


[5-2] 对射式红外传感器计次&旋... P12 - 10:10


  • EXTI


[5-2] 对射式红外传感器计次&旋... P12 - 14:12


  • NVIC //在misc.h中


[5-2] 对射式红外传感器计次&旋... P12 - 22:19


NVIC PriorityGroupConfig(); //这个函数是用来中断分组的,参数是中断分组的方式


1.先判断抢占优先级,高抢占优先级可以打断低抢占优先级的中断

2.如果抢占优先级相同,再判断响应优先级,高响应优先级不能打断低响应优先级

3.抢占优先级相同的中断,当中断同时发生时,响应级高的先执行

4.抢占和响应优先级都一样则哪个中断先发生,则执行哪个



[5-2] 对射式红外传感器计次&旋... P12 - 24:57



  • 写中断函数


[5-2] 对射式红外传感器计次&旋... P12 - 28:23


二、旋转编码器


[5-2] 对射式红外传感器计次&旋... P12 - 35:59


就是说一个中断在扭的时候有一个方向有延迟,虽然延迟很小(90度相位差),但是非常不爽

------------------------------------------------------------

TIM定时器


[6-1] TIM定时中断 P13 - 03:56


  • 定时器本质上就是一个计数器


[6-1] TIM定时中断 P13 - 07:59


主模式触发DAC功能(数模转换)

--主从触发模式


[6-1] TIM定时中断 P13 - 15:12


这里可以看作把引过来定时器作为时钟,引过来的定时器中断一次本地的定时器的计数就加一。


[6-1] TIM定时中断 P13 - 30:08


PSC:prescaler、CNT:counter、ARR:autoreloadregister


[6-1] TIM定时中断 P13 - 32:40


计数器时序

公式:

计数器计数频率: CK_CNT=CK_PSC/(PSC+1)

计数器溢出频率:CK_CNT_OV=CK_CNT/(ARR+1)

=CK_PSC/(PSC+1)/(ARR+1)


预分频器和无预分频器区别……

RCC时钟树


[6-1] TIM定时中断 P13 - 40:53


------------------------------------------------------------

程序:

函数讲解


[6-2] 定时器定时中断&定时器外部时钟 P14 - 04:51


ITR应该就是InputTrigger的意思,选择来自其他的定时器的时钟作为输入触发


[6-2] 定时器定时中断&定时器外部时钟 P14 - 13:29


类比按键抖动延迟那个案例,频率低就是延时时间更长,消除抖动效果越好


定时器外部时钟


[6-2] 定时器定时中断&定时器外部时钟 P14 - 32:53


----------------输出比较--OC------------------

PWM


[6-3] TIM输出比较 P15 - 06:20


那个冻结模式,应该是当某一时刻CNT=CCR以后,之后REF就一直保持为原状态,即使CNT不等于CCR


[6-3] TIM输出比较 P15 - 11:57



[6-3] TIM输出比较 P15 - 21:35


  • PWM频率: Freq=CK_PSC/(PSC+1)/(ARR+1)
  • PWM占空比:Duty=CCR/(ARR+1)
  • PWM分辨率:Reso=1/(ARR+1)



[6-3] TIM输出比较 P15 - 30:18


舵机

Q:不共地会有什么缺点呀?

A:不共地就没法形成回路,无法驱动


代码部分:


[6-4] PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机 P16 - 03:20


  1. 第一步,RCC开启时钟,把要用的TIM外设和GPIO外设的时钟打开
  2. 第二步,配置时基单元,包括前面的时钟源选择和的时基单元,都配置好
  3. 第三步,配置输出比较单元,里面包括CCR的值、输出比较模式、极性选择、输出使能这些参数
  4. 第四步,配置GPIO,把PWM对应的GPIO口,初始化为复用推挽输出的配置
  5. 第五步,运行控制了,启动计数器,这样就能输出PWM了


引脚重映射


[6-4] PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机 P16 - 29:53


直流电机


[6-4] PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机 P16 - 51:10



------------------输入捕获--IC------------------


[6-5] TIM输入捕获 P17 - 04:49



[6-5] TIM输入捕获 P17 - 08:44



[6-5] TIM输入捕获 P17 - 24:41


主从触发模式


[6-5] TIM输入捕获 P17 - 28:31



函数---主从触发模式


[6-6] 输入捕获模式测频率&PWMI... P18 - 10:55


  • 主从模式在上一节27分钟那里有讲,主模式是配置现在的外设去控制别的外设的,从模式是控制自己这时所配置的TIM3的
  • 主模式是输出给别人 ic是输入捕获 选主模式干嘛

-------------ADC-----------------------


[7-1] ADC模数转换器 P21 - 04:04


逐次逼近型ADC


[7-1] ADC模数转换器 P21 - 24:09


转换模式:


[7-1] ADC模数转换器 P21 - 29:46



[7-1] ADC模数转换器 P21 - 36:46




[7-2] AD单通道&AD多通道 P22 - 03:15



[7-2] AD单通道&AD多通道 P22 - 05:16



  1. 配置ADCCLK(rcc.h里)

  2. ADC

*****************

跳……



------------------------------------------------------------

DMA


[8-1] DMA直接存储器存取 P23 - 04:31


软件触发--(flash)

flash的数据是烧录时指定的,可以直接搬运,外设的数据要等待处理完再搬运



[8-1] DMA直接存储器存取 P23 - 07:58


  • 计算机系统的5大组成部分是: 运算器、控制器、存储器、输入设备和输出设备
  • 其中运算器和控制器,一般会合在起,叫做CPU,所以算机的核心关键部分就是CPU和存储器
  • ROM就是只读存储器,是一种非易失性、掉电不丢失的存储器
  • RAM就是随机存储器,是一种易失性、掉电丢失的存储器




//待续……

//想学习但又不想学习呀 (´▽`)

//唉,我只有在不学习的时候才想学习 (´▽`)

------------------------------------------------------------

STM32入门教程-2023持续更新中的评论 (共 条)

分享到微博请遵守国家法律