URL
Assignee
type
status
date
slug
summary
tags
category
icon
password
Status
受小瀞湫和mjh的启发,决定学一下,虽然未来不一定有用…

1-1 课程简介

1-2 STM32简介

  • STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器
 
  • STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等
  • STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器
 
notion image
notion image
片上资源/外设
英文缩写
名称
英文缩写
名称
NVIC
嵌套向量中断控制器
CAN
CAN通信
SysTick
系统滴答定时器
USB
USB通信
RCC
复位和时钟控制
RTC
实时时钟
GPIO
通用IO口
CRC
CRC校验
AFIO
复用IO口
PWR
电源控制
EXTI
外部中断
BKP
备份寄存器
TIM
定时器
IWDG
独立看门狗
ADC
模数转换器
WWDG
窗口看门狗
DMA
直接内存访问
DAC
数模转换器
USART
同步/异步串口通信
SDIO
SD卡接口
I2C
I2C通信
FSMC
可变静态存储控制器
SPI
SPI通信
USB OTG
USB主机接口
系统结构
notion image
引脚定义
notion image

2-1 软件安装

2-2 新建工程

notion image
notion image
用库实现
notion image
总结
notion image
工程建立 添加工程必要文件 Libraries->CMSIS -> CM3-> DeviceSupport-> ST-> STM32F10x-> startup-> arm->是启动文件,复制到工程模板(新建Start),回到STM32F10x(复制那三个文件stmxxxh、systemxxx.c、systemxxx.h)复制到Start,打开CM3->CoreSupport(将两个文件复制到Start)回到Keil将文件添加到工程->点击Target1,将Source Group1单击改名Start->右键选择添加已存在文件,打开Start文件夹,打开筛选器All files,添加启动文件(视频所用型号添加后缀md.s文件)和剩下所有.c.h文件->在工程选项添加该文件夹头文件路径(魔术棒按钮,C/C++,Include Paths栏点右边三个点按钮新建路径再点右三个点按钮添加Start路径,最后点ok)->打开新建工程文件夹添加新文件夹User(放main函数),接着keil里Target右键新建(组别)改名User添加文件选.c名叫main(注意路径选择Userwenj夹),在main里右键插入头文件stm32f10x.h(若用寄存器开发32,到此就完成工程建立) 扳手里Encoding->UTF-8可以防止中文乱码

3-1 GPIO输出

GPIO(General Purpose Input Output)通用输入输出口
可配置为8种输入输出模式
引脚电平:0V~3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
notion image
TTL肖特触发器:整形
notion image
通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式
模式名称
性质
特征
浮空输入
数字输入
可读取引脚电平,若引脚悬空,则电平不确定
上拉输入
数字输入
可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入
数字输入
可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
模拟输入
模拟输入
GPIO无效,引脚直接接入内部ADC
开漏输出
数字输出
可输出引脚电平,高电平为高阻态,低电平接VSS
推挽输出
数字输出
可输出引脚电平,高电平接VDD,低电平接VSS
复用开漏输出
数字输出
由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出
数字输出
由片上外设控制,高电平接VDD,低电平接VSS

3-2 LED闪烁&LED流水灯&蜂鸣器

LED闪烁
notion image

LED流水灯
notion image

蜂鸣器
notion image
结果不放了,这蜂鸣器再多哔哔哔叫几声估计我妈会以为家里报警器响了
 

3-3 GPIO输入

  • c语言数据类型
关键字
位数
表示范围
stdint关键字
ST关键字
char
8
-128 ~ 127
int8_t
s8
unsigned char
8
0 ~ 255
uint8_t
u8
short
16
-32768 ~ 32767
int16_t
s16
unsigned short
16
0 ~ 65535
uint16_t
u16
int
32
-2147483648 ~ 2147483647
int32_t
s32
unsigned int
32
0 ~ 4294967295
uint32_t
u32
long
32
-2147483648 ~ 2147483647
unsigned long
32
0 ~ 4294967295
long long
64
-(2^64)/2 ~ (2^64)/2-1
int64_t
unsigned long long
64
0 ~ (2^64)-1
uint64_t
float
32
-3.4e38 ~ 3.4e38
double
64
-1.7e308 ~ 1.7e308
  • 关键字:#define
  • 用途:用一个字符串代替一个数字,便于理解,防止出错;提取程序中经常出现的参数,便于快速修改
  • 定义宏定义:
#define ABC 12345
  • 引用宏定义:
int a = ABC;  //等效于int a = 12345;
 
  • 关键字:typedef
  • 用途:将一个比较长的变量类型名换个名字,便于使用
  • 定义typedef:
typedef unsigned char uint8_t;
  • 引用typedef:
uint8_t a;  //等效于unsigned char a;
 
  • 关键字:struct
  • 用途:数据打包,不同类型变量的集合
  • 定义结构体变量:
struct{char x; int y; float z;} StructName;
因为结构体变量类型较长,所以通常用typedef更改变量类型名
  • 引用结构体成员:
StructName.x = 'A';
StructName.y = 66;
StructName.z = 1.23;
或  pStructName->x = 'A';  //pStructName为结构体的地址  pStructName->y = 66;
pStructName->z = 1.23;
 
  • 关键字:enum
  • 用途:定义一个取值受限制的整型变量,用于限制变量取值范围;宏定义的集合
  • 定义枚举变量:
enum{FALSE = 0, TRUE = 1} EnumName;
因为枚举变量类型较长,所以通常用typedef更改变量类型名
  • 引用枚举成员:
EnumName = FALSE;
EnumName = TRUE;
按键控制LED
notion image

光敏传感器控制蜂鸣器
notion image
能用,但是有点接触不良,不录视频了QAQ

4-1 OLED调试工具

函数
作用
OLED_Init();
初始化
OLED_Clear();
清屏
OLED_ShowChar(1, 1, 'A');
显示一个字符
OLED_ShowString(1, 3, "HelloWorld!");
显示字符串
OLED_ShowNum(2, 1, 12345, 5);
显示十进制数字
OLED_ShowSignedNum(2, 7, -66, 2);
显示有符号十进制数字
OLED_ShowHexNum(3, 1, 0xAA55, 4);
显示十六进制数字
OLED_ShowBinNum(4, 1, 0xAA55, 16);
显示二进制数字

4-2 OLED显示屏

OLED显示屏
notion image
notion image

5-1 EXTI外部中断

5-2 对射式红外传感器计次&旋转编码器计次

对射式红外传感器计次
notion image

旋转编码器计次
notion image

6-1 TIM定时中断

类型
编号
总线
功能
高级定时器
TIM1、TIM8
APB2
拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能
通用定时器
TIM2、TIM3、TIM4、TIM5
APB1
拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能
基本定时器
TIM6、TIM7
APB1
拥有定时中断、主模式触发DAC的功能

6-2 定时器定时中断&定时器外部时钟

定时器定时中断
notion image

定时器外部时钟
notion image

6-3 TIM输出比较

输出比较简介
  • OC(Output Compare)输出比较
  • 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
  • 每个高级定时器和通用定时器都拥有4个输出比较通道
  • 高级定时器的前3个通道额外拥有死区生成和互补输出的功能
PWM简介
  • PWM(Pulse Width Modulation)脉冲宽度调制
  • 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域
  • PWM参数:
频率 = 1 / TS            占空比 = TON / TS           分辨率 = 占空比变化步距
notion image
notion image
输出比较
notion image
notion image
模式
描述
冻结
CNT=CCR时,REF保持为原状态
匹配时置有效电平
CNT=CCR时,REF置有效电平
匹配时置无效电平
CNT=CCR时,REF置无效电平
匹配时电平翻转
CNT=CCR时,REF电平翻转
强制为无效电平
CNT与CCR无效,REF强制为无效电平
强制为有效电平
CNT与CCR无效,REF强制为有效电平
PWM模式1
向上计数:CNT<CCR时,REF置有效电平,CNT≥CCR时,REF置无效电平 向下计数:CNT>CCR时,REF置无效电平,CNT≤CCR时,REF置有效电平
PWM模式2
向上计数:CNT<CCR时,REF置无效电平,CNT≥CCR时,REF置有效电平 向下计数:CNT>CCR时,REF置有效电平,CNT≤CCR时,REF置无效电平
参数计算
notion image
  • PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)
  • PWM占空比: Duty = CCR / (ARR + 1)
  • PWM分辨率: Reso = 1 / (ARR + 1)
硬件电路
notion image
 
notion image

6-4 PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机

PWM驱动LED呼吸灯
notion image

PWM驱动舵机
notion image

PWM驱动直流电机
notion image
Matlab入门暑期交流-香港大学
Loading...