先了解下引脚接线图
(上图为自己用PS整理的,需要清晰的同学可留言邮箱)
点灯(成为一名点灯大师)
//点灯主函数
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"
int main (void){//主程序
RCC_Configuration(); //时钟设置
LED_Init();
while(1){
//方法1:
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
delay_us(50000); //延时1秒
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0
delay_us(50000); //延时1秒
//方法2:
// GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //取反LED1
// delay_ms(500); //延时1秒
//方法3:
// GPIO_SetBits(LEDPORT,LED1); //LED灯都为高电平(1)
// delay_s(1); //延时1秒
// GPIO_ResetBits(LEDPORT,LED1); //LED灯都为低电平(0)
// delay_s(1); //延时1秒
//方法4
// GPIO_Write(LEDPORT,0x0001); //直接数值操作将变量值写入LED
// delay_s(2); //延时1秒
// GPIO_Write(LEDPORT,0x0000); //直接数值操作将变量值写入LED
// delay_s(2); //延时1秒
}
}
小结:
GPIO_WriteBit(哪组的IO(可选A/B/C/D/E),这个组的哪个端口(可选0~15),是1还是0)
GPIO_SetBits(哪组的IO,这个组的哪个端口的灯亮)
GPIO_ResetBits(哪组的IO,这个组的哪个端口的灯灭)
GPIO_Write(哪组的IO,批量设置哪些端口是1还是0)
按键KEY控制点灯
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key.h"
int main (void){//主程序
u8 a; //定义变量
//初始化程序
RCC_Configuration(); //时钟设置
LED_Init();//LED初始化
KEY_Init();//按键初始化
//主循环
while(1){
//示例1:无锁存
if(GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
GPIO_ResetBits(LEDPORT,LED1); //LED灯都为低电平(0)
}else{
GPIO_SetBits(LEDPORT,LED1); //LED灯都为高电平(1)
}
//示例2:无锁存
// GPIO_WriteBit(LEDPORT,LED1,(BitAction)(!GPIO_ReadInputDataBit(KEYPORT,KEY1)));
//示例3:有锁存
// if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
// delay_ms(20); //延时去抖动
// if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
// GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //LED取反
// while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开
// }
// }
//示例4:有锁存
// if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
// delay_ms(20); //延时20ms去抖动
// if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
// //在2个LED上显示二进制加法
// a++; //变量加1
// if(a>3){ //当变量大于3时清0
// a=0;
// }
// GPIO_Write(LEDPORT,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)
// while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开
// }
// }
}
}
小结:
GPIO_ReadInputDataBit(哪组的IO,该组的端口号) //输入电平,平时端口处于高电平,按下则为低电平
GPIO_ReadOutputDataBit(哪组的IO,该组的端口号) //输出电平,平时端口处于高电平,按下则为低电平
FLASH读写灯状态
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "flash.h"
#define FLASH_START_ADDR 0x0801f000 //写入的起始地址
int main (void){//主程序
u16 a; //定义变量
//初始化程序
RCC_Configuration(); //时钟设置
LED_Init();//LED初始化
KEY_Init();//按键初始化
a = FLASH_R(FLASH_START_ADDR);//从指定页的地址读FLASH
GPIO_Write(LEDPORT,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)
//主循环
while(1){
//示例4:有锁存
if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
delay_ms(20); //延时20ms去抖动
if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
//在2个LED上显示二进制加法
a++; //变量加1
if(a>3){ //当变量大于3时清0
a=0;
}
GPIO_Write(LEDPORT,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)
FLASH_W(FLASH_START_ADDR,a); //从指定页的地址写入FLASH
while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开
}
}
}
}
小结
#define FLASH_START_ADDR 0x0801f000 //设定写入数据存放的地址
FLASH_W(FLASH_START_ADDR,a) //从哪个地址开始写入a
a = FLASH_R(FLASH_START_ADDR) //从哪个地址读取数据