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:General-purpose input/output,通用输入/输出口。
GPIO模块一般结构:
不能影响到其他位
直接读写:读出、修改对应位、写入
// 要设置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);
unsigned int *p=0x40010800;
*p = val;
val = *p;