点灯项目

寄存器法

灯在PC13口,因此需要配置APB2 外设时钟使能寄存器(RCC_APB2ENR),查阅STM32F10x手册(中文)得出位4 IOPC
EN可用于IO口C时钟的使能,具体到代码为RCC->APB2ENR=0x00000010;
然后用端口配置高寄存器(GPIOx_CRH)对PC13配置推挽输出,根据手册在输出模式(MODE13[1:0]>00)下该位赋值为11,而MODE13[1:0]口也应配置为11。
概括地说,IO的功能模式大致可以分为输入、输出以及输入输出双向三大类。其中作为基本输入IO,相对比较简单,主要涉及的知识点就是高阻态;作为输出IO,相比于输入复杂一些,工作模式主要有开漏(Open Drain)模式和推挽(Push-Pull)模式,这一部分涉及的知识点比较多;对于输入输出IO,容易产生疑惑的地方是准双向和双向端口的区别。
推挽输出(Push-Pull Output)
推挽输出的结构是由两个三极管或者MOS管受到互补信号的控制,两个管子始终保持一个处于截止,另一个处于导通的状态。如图 10所示。
推挽输出的最大特点是可以真正能真正的输出高电平和低电平,在两种电平下都具有驱动能力。
开漏输出(Open Drain Output)
常说的与推挽输出相对的就是开漏输出,对于开漏输出和推挽输出的区别最普遍的说法就是开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。下面就从内部结构和原理上说明为什么开漏输出输出高电平时没有驱动能力,以及进一步比较与推挽输出的区别。
具体到代码为GPIOC->CRH = 0x00300000;
最后用端口输出数据寄存器(GPIOx_ODR) (x=A..E),配置13号口为高电平也就是灯熄灭,配置低电平电路导通灯点亮。
GPIOC->ODR = 0x00000000;

库函数用法

将以上步骤写成库函数的形式如下

1
2
3
4
5
6
7
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);

打算打板32开发板配套学习PCB

使用嘉立创EDA 嘉立创EDA常用快捷键
FR-4和铝基板一般选前者就行。

C++

上次学到构造函数和析构函数的P109,有点忘了这次复习一下,复习了基本该概念构造函数是初始化时候类中的值,析构函数是程序结束后类中的值。