嵌入式学习路线

  1. C语言 (翁恺/鹏哥) -> 重点攻克指针。
  2. 51单片机 (江科大) -> 2周时间了解寄存器概念,别花太久。
  3. STM32 (江科大) -> 重点掌握中断、定时器、通信协议(I2C, SPI, UART)。
  4. **推荐老师:【凡亿教育】**Altium Designer (AD) --PCB
  5. 做个小项目 -> 比如做一个平衡小车、智能手环(结合PCB画板)。
  6. FreeRTOS (正点原子) -> 理解多任务。
  7. Linux应用开发 -> 熟悉Linux命令,GCC,Makefile,文件IO,多线程。
  8. 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(输出捕获),可以控制

相关推荐
finegx2 分钟前
反汇编objdump和strace学习
linux·经验分享·学习
Shining05967 分钟前
前沿模型系列(三)《检索增强的语言模型》
人工智能·学习·其他·语言模型·自然语言处理·大模型·rag
QYQ_112723 分钟前
嵌入式学习——51单片机(下)
嵌入式硬件·学习·51单片机
今儿敲了吗32 分钟前
python基础学习笔记第四章
c++·笔记·python·学习
【数据删除】34835 分钟前
计算机复试学习笔记 Day44
笔记·学习
星幻元宇VR40 分钟前
VR地震科普学习机|沉浸式防震减灾新体验
学习·安全·vr·虚拟现实
星幻元宇VR1 小时前
VR爱国教育学习机|让红色精神在沉浸体验中代代传承
科技·学习·vr·虚拟现实
逆小舟1 小时前
【SWM320】学习使用UART
单片机·学习·嵌入式软件
果果燕1 小时前
网络编程-TCP 协议学习笔记
网络·学习·tcp/ip
蒸蒸yyyyzwd1 小时前
设计模式之美学习笔记
笔记·学习·设计模式