STM32单片机(杨桃电子笔记S25点灯-S30FLASH)

先了解下引脚接线图

 (上图为自己用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)              //从哪个地址读取数据

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值