点亮LED
- 看原理图确定控制LED的引脚
- 看主芯片手册确定如何设置/控制引脚
- 写程序
LED有很多种,像插脚的,贴片的。
它们长得完全不一样,因此我们在原理图中将它抽象出来。
嵌入式系统中,一个LED的电阻非常低,I = U/R,因此I非常大,会将LED烧坏,所以需要串联一个电阻。
点亮LED需要通电源,同时为了保护LED,加个电阻减小电流。
控制LED灯的亮灭,可以手动开关LED,但在电子系统中,不可能让人来控制开关,通过编程,利用芯片的引脚去控制开关。
LED的驱动方式,常见的有四种。
方式1:使用引脚输出3.3V点亮LED,输出0V熄灭LED。
方式2:使用引脚拉低到0V点亮LED,输出3.3V熄灭LED。
有的芯片为了省电等原因,其引脚驱动能力不足,这时可以使用三极管驱动。
方式3:使用引脚输出1.2V点亮LED,输出0V熄灭LED。
方式4:使用引脚输出0V点亮LED,输出1.2V熄灭LED。
由此,主芯片引脚输出高电平/低电平,即可改变LED状态,而无需关注GPIO引脚输出的是3.3V还是1.2V。
所以简称输出1或0:
逻辑1–>高电平
逻辑0–>低电平
电路基础
当左边电压大于右边电压时,电流就会通过。
当P级电压大于N级电压时,三极管就会导通。
GPIO引脚操作方法
GPIO:General-purpose input/output,通用输入/输出口。
GPIO模块一般结构:
- 有多组GPIO,每组有多个GPIO。
- 使能:电源/时钟
- 模式(Mode):引脚可用于GPIO或其它功能
- 方向:引脚Mode设置为GPIO时,可以继续设置它是输出引脚,还是输入引脚。
- 数值:对于输出引脚,可以设置寄存器让它输出高、低电平。对于输入引脚,可以读取寄存器得到引脚的当前电平。
GPIO寄存器的2种操作方法
不能影响到其他位
直接读写:读出、修改对应位、写入
// 要设置bit n
val = data_reg;
val |= (1 << n);
data_reg = val;
// 要清除bit n
val = data_reg;
val &= ~(1<<n);
data_reg = val;
set-and-clear protocol:
set_reg,clr_reg,data_reg三个寄存器对应的是同一个物理寄存器
要设置bit n:set_reg = (1<<n);
要清除bit n:clr_reg = (1<<n);
复位和时钟控制RCC
怎么访问寄存器
unsigned int *p=0x40010800;
*p = val;
val = *p;