STM32F103开发板开发学习(一).3.2

时间:2024-04-02 16:38:13

下载工具四线制:SWCLK、SWDIO、GND、3,3v,缺口是白色矩形块

上午完成任务:

1.同时点亮LED0和LED1

2.关闭LED0和LED1

3.LED0和LED1闪烁

4.蜂鸣器间歇鸣叫

 

注意:一个串口的使用,需要:

1.GPIO_InitTypeDef  GPIO_InitStructure;定义结构体变量

2.RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOE, ENABLE );给端口上电

3.

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;                                

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

结构体元素赋值

4.GPIO_Init( GPIOE, &GPIO_InitStructure);初始化端口

5.GPIO_ResetBits(GPIOE, GPIO_Pin_5|GPIO_Pin_6);调整端口电平

 

LED闪烁和蜂鸣器间歇鸣叫都需要使用时延函数来控制时间,在时延函数后,执行更改电平的语句,达到控制闪烁和间歇的效果

//自定义时延函数(不精确)

void delay(unsigned int a)

{

for(unsigned int i=0;i<=a;i++)

for(unsigned int j=0;j<=i;j++);

}

主函数示例:

GPIO_ResetBits(GPIOE, GPIO_Pin_5|GPIO_Pin_6);

delay_s(1);

GPIO_SetBits(GPIOE, GPIO_Pin_5|GPIO_Pin_6);

delay_s(1);

GPIO_SetBits(GPIOB, GPIO_Pin_8);

delay_s(1);

GPIO_ResetBits(GPIOB, GPIO_Pin_8);

delay_s(1);

 

 

下午完成任务:

1.精确控制时延信号

注意:控制时延需要使用空指令来占用cpu运行时间。__NOP();命令是空指令,先根据cpu信号,确定cpu主频,计算出每微秒所能执行的指令时,先定义函数,做出u秒级时延控制,再封装毫秒级,最后封装出秒级函数。示例:

void delay_us(u32 nTimer)//uÃëÑÓʱ

{

u32 i=0;

for(i=0;i<nTimer;i++)

{

__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();

}

}

void delay_ms(u32 nTimer)

{

u32 i=0;

for(i=0;i<nTimer;i++)

delay_us(1000);

}

void delay_s(u32 nTimer)

{

u32 i=0;

for(i=0;i<nTimer;i++)

delay_ms(1000);

}

2.按键控制

IPD-Input Down输入下拉,就是拉低

IPU-Input UP 输入上拉,就是拉高

按键按下代表导通,cpu提供的电都是弱电流,

按键设计有两种方式,连接电源的,要将另一端设置成低电平,下拉就设置成低电平,按下导通获得高电位。

STM32F103开发板开发学习(一)2019.3.2

STM32F103开发板开发学习(一)2019.3.2

按键控制完成步骤:

1.定义按键控制结构变量

2.给端口上电

3.按钮定义并初始化

 注意:按钮为输入,注意调整结构体中的输入输出模式

4.定义并使用ReadValue = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);

5.ifelse条件判断执行通断电

 

只要将结构体定义和初始化放在一起,就可以复用变量,减少变量定义,例如:

GPIO_InitTypeDef  GPIO_InitStructure_Button;

 

GPIO_InitStructure_Button.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure_Button.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure_Button.GPIO_Mode = GPIO_Mode_IPD;

GPIO_Init( GPIOA, &GPIO_InitStructure_Button);

和复用GPIO_InitStructure是同样的效果

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;

GPIO_Init( GPIOA, &GPIO_InitStructure);

 

板子通电初始化时,一般线路都有默认电平,大多数是低电平,此块开发板在去掉else语句时,重新编译下载,会发现两个灯常亮,蜂鸣器不响,再按一次开关,这时灯常亮,蜂鸣器长响。原因就是默认电平的存在。

 

多按键控制——通过重复定义按键完成

可以完成输密码亮灯程序,通过ifelse的嵌套