- C语言 (翁恺/鹏哥) -> 重点攻克指针。
- 51单片机 (江科大) -> 2周时间了解寄存器概念,别花太久。
- STM32 (江科大) -> 重点掌握中断、定时器、通信协议(I2C, SPI, UART)。
- **推荐老师:【凡亿教育】**Altium Designer (AD) --PCB
- 做个小项目 -> 比如做一个平衡小车、智能手环(结合PCB画板)。
- FreeRTOS (正点原子) -> 理解多任务。
- Linux应用开发 -> 熟悉Linux命令,GCC,Makefile,文件IO,多线程。
- Linux驱动 (韦东山) -> 最难也是最值钱的部分
以上是我的学习路线,我文章下面的内容也就是我的笔记。由于我有基础,所以从stm32开始学习。
STM32 (江科大)
day01--GPIO输入输出模式

系统结构图(所有的GPIO都挂载在APB2总线上)

GPIO口结构图
8中输入输出模式

前4种输入模式,观看GPIO口结构图上面一条线路,也就是相关的上拉下拉等。
输出模式对应下面一条线路,对应开漏模式pMOS断开高阻态,Nmos接通低电平,推挽输出高低电平均能输出,对应PMOS和NMOS都能使用
案例一:点亮led灯
cpp
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 1. 开启时钟,上面结构图,GPIO挂载在APB2总线。
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // LED接在PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 【重点】推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// 点亮 低电平点亮
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
/**
推挽输出 (GPIO_Mode_Out_PP)--高低电平均有驱动能力
点亮板载led
低电平点亮
*/

因为我有一点cubemx基础,可以手动配置,就不用代码写了实际上和上面代码库函数配置是一样的。
案例二:读取按键状态控制小灯反转

在GPIO口中,有输入数据寄存器和输出数据寄存器,可以通过调用库函数,从输入输出寄存器中读取数据,key按键GPIO口设置为输入模式,上拉输入,当按下时可以从输入寄存器中读取3.3v高电平,从而在输入寄存器中设置为1。
day2---中断



GPIO引脚通过中断引脚选择AFIO,每一个选择一个GPIOABC中的引脚,在加入PVD,USB,等中断,之后设置边沿监测是上升沿还是下降沿以及双边沿监测触发。
定时器

定时器基本结构
┌─────────────────────────────────────────────────────────┐
│ STM32 定时器结构 │
├─────────────────────────────────────────────────────────┤
│ │
│ 时钟源 预分频器 计数器 │
│ (CLK) (PSC) (CNT) │
│ │
│ 72MHz ──────► ÷(PSC+1) ──────► 0→ARR ──────► 中断 │
│ (APB) ▲ │
│ │ │
│ 自动重载值 │
│ (ARR) │
│ │
└─────────────────────────────────────────────────────────┘
工作流程
步骤1: 时钟源 (如APB1 = 72MHz)
↓
步骤2: 预分频器分频
计数器时钟频率 = 时钟源 / (PSC + 1)
↓
步骤3: 计数器从0计数到ARR
计数次数 = ARR + 1
↓
步骤4: 产生更新事件(中断)
定时时间 = (PSC + 1) × (ARR + 1) / 时钟源频率
↓
步骤5: 计数器清零,重新计数
中断函数是自动执行的,不需要手动调用:
硬件触发机制:当 TIM2 定时器溢出时,硬件自动触发中断
中断向量表:启动文件(startup_stm32f103xb.s)中定义了 TIM2_IRQHandler 的地址
自动跳转:硬件检测到中断后,CPU 自动跳转到这个函数执行
案例: PWM波形--高低电平占一个周期的时间比例

CUBEMX配置PWM输出控制呼吸灯
PWM (脉冲宽度调制):
通过改变占空比控制LED亮度
占空比 = 高电平时间 / 周期时间
┌────────────────────────────────────────────────┐
│ 占空比 10% (暗) │
│ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ │
│ ▕█▏ │
│ │
│ 占空比 50% (中等亮度) │
│ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ │
│ ▕██████████████████▏ │
│ │
│ 占空比 90% (亮) │
│ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ │
│ ▕████████████████████████████████████▏ │
└────────────────────────────────────────────────┘
PWM频率选择:
> 100Hz - 人眼无法察觉闪烁
推荐 1KHz - 平衡性能和效果
推荐使用晶振体提供的外部时钟源,因为PWM需要一个稳定精度高的频率信号。
时钟源 → 预分频器(PSC) → 计数器(CNT) → 比较器 → PWM输出
↓ ↓ ↓
降频 递增/递减 CCR比较
呼吸灯用到OC(输出捕获),可以控制
