int main() //主函数 { } void SystemInit() //在执行主函数前,会被调用。不进行实现。在启动文件中被调用 { }
; Reset handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main IMPORT SystemInit LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP
注意:其中PB0是绿灯
*(unsigned int*)(0x40010c0c) &= ~(1<<0);
*(unsigned int*)(0x40010c00) |= (1<<0);
开漏和推挽区别在于:
开漏:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。
推挽输出:可以输出高,低电平,连接数字器件。
开漏电路就是指以MOS FET的漏极为输出的电路。一般的用法是会在漏极外部的电路添加上拉电阻。完整的开漏电路应该由开漏器件和开漏上拉电阻组成。
推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止
引入一句话:“复用输出当前的引脚功能功能有外设控制,并不由通用IO控制,因此你要通过操作GPIO来驱动LED的话,肯定是用通用的”
速度可以随便选择
*(unsigned int*)(0x40021018) |= (1<<3);
int main() { *(unsigned int*)(0x40021018) |= (1<<3); *(unsigned int*)(0x40010c00) |= (1<<0); *(unsigned int*)(0x40010c0c) &= ~(1<<0); } void SystemInit() { }
原文:https://www.cnblogs.com/ssyfj/p/11520223.html