一.新建工程

1.新建工程

2.添加文件

按照视频要求添加  启动文件,库函数,及存放  main  函数的文件

3.添加路径

二.GPIO输入(具体电路看手册):

基本结构:

每个 GPIO都有 16  位引脚,且寄存器负责存储,驱动器负责 使能,  输入  1  为高电平  ,  0  为低电平

位结构:

保护二极管作用:

当输入电压大于 3.3 V   电流从  VDD流出

当输入电压小于  0V      电流从  Vss 到  I/O  引脚流出

防止电路受损  

位设置与位清除的作用:

单独控制某一端口而使其他端口不变,需要用哪个端口则在 位设置  输入1    ,清除某个端口则在清除寄存器写 1 

输出控制:

推挽:高低电平都有驱动能力

开漏:只有低电平有驱动能力

关闭:高低电平都无驱动能力,此时由外部电路决定

当输出数据寄存器为 1  上开 下关  高电平

当输出数据寄存器为 0   上关下开   低电平

硬件电路:

1.左端 低电平  亮

2 左端 高电平 亮

3 左端 低电平  通电路

4 左端  高电平  通电路

面包板:

中间负责插 LED灯 ,芯片,两端控制电源

上一个为高电平,下一个为低电平,最后一个为端口写入

GPIO输入:

按键:

传感器:

1  为分压

2  为电容,稳定电路,可去掉

另外,AO为  输出电压,    VCC 为上拉, GND 为下拉,且电阻越小,拉力越大

硬件电路:

上面两个电路为   按下按键为 高电平  松手为低电平

下面两个电路为   按下按键为  低电平  松手为高电平

左边两幅图  只能分别接为上拉  和  下拉模式

右边两张图   可以为悬空 或  上下拉模式

C语言关键字:

快捷键:crtrl art  空格:  显示提醒内容

函数:

1. 读取输入寄存器某一位

2.读取输入寄存器的所有

3.读取输出寄存器的某一位

4.读取输出寄存器的所有

OLED 调试工具:

调试方式:

硬件电路:

OLED 驱动函数:

显示十进制数时,如果 要显示位数比实际位数大  则显示数前补0,如果要显示数比实际数小,则去掉高位,如 12345  会去掉 1

EXTI外部中断:

中断系统:

NVIC基本结构:

NVIC:用于统一分配中断优先级和管理中断,确定优先级

最后由  CPU 进行中断

NVIC优先级分组:

数越小 ,优先级越高,如 0 为最高优先级

抢占优先级:决定嵌套中断的先后顺序,可以在确定了中断后再次插队更优先的

响应优先级:后来居上

EXIT 简介:

上升沿:由低到高发生中断

下降沿:由高到低发生中断

双边沿:由低到高和由高到低都可发生中断

软件触发:代码触发

事件响应:中断发生后不会传到CPU,会传到其他外设

中断响应:中断发生后传到CPU

EXIT 结构:

AFIO :只能选择1个中断引脚

EXIT  框架图:

1.

2.

3.

4.

可以由多个输入,但只能由一个输出

1.与门: 只有一个 1  就是1 

2.或门:只要有  1  个  0  ,那就是 0

3.非门: 输入1 输出 0, 输入 0 输出 1

4.选择控制器: 从 一堆数据中 选择 1 个

旋转编码器硬件电路:

上为正转,A先下降,下图为逆转

两侧触点波形相差 90度,编码盘(1图形右侧)正向旋转 B 端滞后 90度  ,逆向旋转相反

不按下默认被上拉为 高电平,按下则被下拉为低电平

AFIO函数:

(在 GPIO 中)

//   锁定引脚信息

//  清除 AFIO 配置

// 选择中断引脚

EXIT函数:

1.为初始化

2. 为软件中断

3.为查看主程序标志位是否 置1

4.为主程序清除标志位

5.为查看中断中标志位是否置1,及清除

NVIC 函数:

(misc.h 中)

第一个  为中断分组

第二个为 初始化

后两个不常用

中断函数:(在启动文件中)

TIM定时中断:

定时器类型:

内部时钟 频率都为 72MHZ

定时框图:

基本:

1.会储存计数次数,当总次数到达预定的次数就会发生中断

2.为更新中断,其后接 NVIC

3.为事件,为更新事件,其不会产生中断,但会引起其他电子元件工作

4.DAC 为硬件自动化,其不受 程序控制,由 U 传到 TRGO

实际分频系数 =  预分频器的值 + 1

即 当 预分频器为  1  时   ,实际分频之后的频率等于   总频率 / 3

通用:

支持向上计数,向下计数和中央对齐

中央对齐:向上和向下都会产生中断

定时中断基本结构:

预分频器时序:

(具体符号含义去看定时框图)

改变预分频系数 得等到下一周期频率才会改变

计数器时序:

通过 ARPE 来判断是否预装入,即是否有缓存区

内部RC 振荡器 为 8MHZ,外部晶振为8MHZ ,但经上面会 ×9 变为72HZ

函数:

// 配置时基单元

// 定时器使能

// 中断输出控制

// 配置时钟

// 配置极性,分频器,滤波器

// 运行控制

// 改预分频器的值

// 更改计数器模式

// 自动计时器有无预装

TIM输出比较:

CNT 会和 CCR 比较,当 CNT 大于/ 小于 CCR 时 置1 ,等于  CRR 时 置 0 

且基本计时器无输出比较,只有高级和通用计时器有输出比较

PWM简介:

占空比为高电平时间占总周期的比例,其乘高低电压之差为等效电压

不需要中断,仅比价端口两端电压

输出比较通道及输出比较模式:

PWM基本结构:

还要有 PWM  的输出口,具体看引脚接线图

红线为 CCR ,当计数器在CCR 以下为高电平,以上为低电平,到ARR清零

舵机:

硬件电路:

直流电机硬件电路:

当电极正接,电机正转,当电机反接,电机反转

1.   给 低功率时 VM 就会汲取电流到 两个电机上,驱动

STBY :当 接 CND  时,为待机模式,当接逻辑电平时为非待机模式

电机电源为电机的额定电压,逻辑电平为 stm32板的电压,为3V  ,51单片机为5 V

函数:

//  初始化输出比较单元

//  给结构体赋初始值,方便后面修改,防止由于结构体初始化不完全导致高级定时器不可用

// 引脚重映射,可以将引脚冲突的定时器的引脚改变,同时可以用来解除调试端口

//  改变CCR 的值

//  用来更改 psc 的值

TIM输入捕获:

输入捕获简介:

频率测量:

测周法: 第二次测计数N  时,需要把 CNT  清零,此时才是两个上升沿的时间间隔

输入捕获通道:

CC1S : 对数据选择器进行选择

ICPS:     配置其上方的分频器

CC1E:   控制使能或失能

从模式:完成CNT  的清零

主从触发模式:

主模式:接收定时器内部的信号,启动其他外设

从模式:接收自己或其他外设的信号,启动自身定时器的运行

输入捕获基本结构:

TIFP1 设置为上升沿触发,启动CCR1捕获和CNT清零

PWMI 基本结构:

滤波器:降低噪声

边沿检测:来一个边沿就开启一次

TIFP1 设置为上升沿触发,启动CCR1捕获和CNT清零,CCR2  为高电平计数值

函数:

//   写入PSC

// 给输入捕获计时器一个初始值

//  从模式触发源选择

// 主模式输出触发源

// 选择从模式

//  读出CCR

//  设置另一个通道,其结果与另一个通道相反,如一个通道为直连,上升沿触发,则另一个通道为交叉,下降沿触发

TIM编码器接口:

简介:

编码器接口基本结构:

旋转编码器相当于外部时钟,故不需要设置时钟和计数方式

工作模式:

函数:

// 配置编码器接口

ADC 模拟转换器:

简介:

        

逐次逼近型ADC:

ADCCLK 分频后最大频率为14MHZ

通道选择开关会传入数据,DAC也会传入数据,两者进行比较,直到 DAC =  通道选择开关会传入数据。

规则组:可以选中16个通道

注入组:可以选择4个通道

START:开启数据转换转换

CLOCK:ADC逐次比较

DMA: 防止数据被覆盖

转换电路:

数据对齐:

左对齐:数据会扩大16倍

转换时间:

采样时间:在信号传入过程中打开,记录传入波形,防止因波形持续传入导致不知道传入波形为什么

硬件电路:

ADC基本结构:

1.GPIO 后为 设置 ADCCLK ,选择 规则组或注入组 的通道和模式

2.用结构体初始化ADC

3.校准

转换模式:

单次转换: 需要每次都有手动开启触发,设置EOC

非模式转换: 只有序列1有效

连续转换:    一次转换完后不会截止,会连续进行,所以不用手动设置

扫描模式:  可以设置那几个序列有效

函数:

// 给序列填写通道

// 设置ADCCLK,   其在 rcc.h里

// 校准函数

// 软件触发

DMA:

存储器:

ROM : 只读存储器

DMA基本结构:

仲裁器:确保总线的优先级

Flash  :为只读

地址是否自增: 起始首地址是否改变

数据宽度:一次转运数据的大小

传输计数器:传输次数,自减

自动重装器:决定当计数器减到0,是否恢复原计数次,再重新传输

硬件触发需要看通道,软件触发不需要,选任意一个通道都可以

自动重装和软件触发不能同时使用

给传输寄存器赋值,需要使 cmd 失能

DMA 请求:

数据传输宽度:

小转大:高位补零

大转小:高位舍弃

串口协议:

通信接口

串口参数及时序:

无校验为8位,有校验为9位

USART 外设:

USART结构:

发送数据寄存器转移时 置 TXE 标志位,  实际写入DR

接收移位寄存器转移数据时置  RXNE 标志位,实际读取DR

最后开启 cmd 开关

引脚选复用模式,因为要用外设引脚

TX发送,RX接收,数据传输为16进制数

将  printf  转置到串口显示

方法1和2

在文件开头要加上  <stdio.h>

方法3

数据包:

载荷和包头包尾重复时选择固定包长

I方C通信:

硬件电路

时序基本单元

发送:

当主机发送0时,SDA下降,当主机发送1时,SDA上升

接收:

应答机制:

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐