STM32学习
STM32 学习

工程架构:

ST建议是如果是想自己写中断的话,是写在这个位置;

直接操作寄存器可以查看stm32f10x.h:

stm32f10x.adc.c封装了寄存器的操作,提供了更加人性化的操作。

GPIO介绍
- GPIO(General Purpose Input Output)通用输入输出口
 - 可配置为8种输入输出模式
 - 引脚电平:0V~3.3V,部分引脚可容忍5V
 - 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通讯协议输出时序等
 - 输入模式下课读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通讯协议接收数据等
 
GPIO的基本结构

GPIO位结构

通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式

浮空/上拉/下拉输入

LED和蜂鸣器介绍
- LED:发光二极管,正向通电点亮,反向通电不亮
 - 有源蜂鸣器:内部自带震荡源,将正负极接上直流电压即可持续发声,频率固定
 - 无源蜂鸣器:内部不带震荡源,需要控制器提供震荡脉冲才可发声,调整提供震荡脉冲的频率,可发出不同频率的声音
 

对应硬件电路

电灯代码:
1  | 
  | 
按键介绍:
- 按键:常见的输入设备,按下导通,松手断开
 - 按键抖动:由于按键内部使用的是机械式弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动
 

按钮控制代码:
1  | 
  | 
按键与传感器的接法
- 上面两种解法是按下为高电平,松开是低电平。下面两种解法反之。(一般常用上面两种接法)
 

传感器模块介绍:
- 传感器模块:传感器元件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外接模拟量的变化而变化,通过与定值电阻分压即可得到模拟电压输出,再通过电压比较器进行二值化即可得到数字电压输出
 


C语言数据类型:

- 在51单片机中int是占16位的,而在STM32中int是占32位的,如果要用16位的数据,要用short来表示
 
OLED驱动函数


I2C通讯
- I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线
 - 两根通讯线:SCL(Serial Clock)、SDA(Serial Data)
 - 同步,半双工
 - 带数据应答
 - 支持总线挂载多设备(一主多从、多主多从)
 

硬件电路:
- 简单双向串口通信由两根通信线(发送端TX和接收端RX)
 - TX与RX要交叉连接
 - 当只需单向的数据传输时,可以只接一根通信线
 - 当电平标准不一致时,需要加电平转换芯片
 


MPU6050:
- MPU6050是一个六轴姿态传感器,可以测量芯片自身X、Y,Z轴的加速度、角速度参数,通过数据融合,可以进一步得到姿态角,常应用于平衡车、飞行器等需要检测自身姿态的场景
 - 3轴加速度计(Accelerometer):测量X、Y,Z轴的加速度
 - 3轴陀螺仪传感器(Gyroscope):测量X,Y,Z轴的角速度
 


EXTI介绍
- EXTI(Extern Interrupt)外部中断
 - EXTI可以检测指定GPIO口的电平信号,当其指定的GPIO产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
 - 支撑的触发方式:上升沿/下降沿/双边沿/软件触发
 - 支撑的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
 - 通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
 - 触发响应方式:中断响应/事件响应
 
中断系统
- 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行
 - 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
 - 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前的中断程序,转而去处理新的中断程序,处理完成后一次进行返回
 
中断执行流程;

STM32中断

NVIC基本结构

NVIC优先级分组

AFIO复用IO口
- AFIO主要用于引脚复用功能的学则和重定义
 - 在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择
 

EXTI框图

旋转编码器介绍
- 
旋转编码器:用来测量位置、速度或者旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向
 - 
类型:机械触点式/霍尔传感器式/光柵式
 

旋转编码器硬件电路

注意:
- 中断函数里,最好不要执行耗时过长的代码,中断函数要简短快速,别刚进中断就执行一个Delay多少毫秒这样的代码,因为中断是处理突发的事情,如果你为了一个突发的事情待着中断不出来了,那么主程序就会受到堵塞,另外就是,最好不要在中断函数和主函数调用相同的函数或者操作同一个硬件,尤其是硬件相关的函数,比如OLED显示函数,如果你既在主程序里调用OLED,又在中断里调用OLED,OLED就会显示错误。
 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 长白崎の个人博客!
 评论






