下载工具四线制: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提供的电都是弱电流,
按键设计有两种方式,连接电源的,要将另一端设置成低电平,下拉就设置成低电平,按下导通获得高电位。
按键控制完成步骤:
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的嵌套