初识STM32与震动开灯

初识STM32与震动开灯

之前听我朋友说STM32就是调库,很简单 最近也突然想学一下STM32基础知识,就买了一些相关硬件跟着视频做一些简单的小项目,不竟然(虽然在操作过程中都是配置固件库里面的函数)真正想掌握一点也不简单。不管学什么都需要自己多花时间,慢慢积累才是最重要的。作为一种兴趣学习希望自己也能坚持

下面就用迷你版STM32开发板从最简单的点灯开始学习吧

一、准备工作

1.所用软件

KEIL5
ch341ser / PL2303_v110
FlyMcu烧程序

软件相关链接:链接:https://pan.baidu.com/s/1QKIL0j17h6hfS8nwO8I3UQ
提取码:oi36
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V3的分享

2.所用硬件

miniSTM32开发板
继电器
LCD灯
USB转TTL
若干杜邦线

下面的学习过程中都采用了模块化的编程思想,以及建立自己的固件库,由浅入深 慢慢熟悉STM32相关寄存器的配置

二、环境搭建

1.先建立一个存放文件的文件夹,将我们所需要用的软件放在一起

在这里插入图片描述2.先后双击下面两个文件

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

上面KEIL5安装完成后再加入我们所需要的包,双击安装就可以了
接着把所需要的一些串口和烧入程序的软件对应安装就可以开始我们的第一个工程了

在这里插入图片描述

三、建立第一个工程

在这里插入图片描述
在这里插入图片描述这里我选择的是STM32F103下面的C8芯片
在这里插入图片描述上面点击保存后,我们命名为.c文件在添加进去就可以开始编写程序了
在这里插入图片描述

四、开始第一个小项目,震动开灯

(一)led函数编写

1.头文件led.h

#include "stm32f10x.h"
void Led_Init(void);

2.源程序

#include "led.h"
#include"stm32f10x.h"
void Led_Init(void)
	
{
	
	 GPIO_InitTypeDef  Led_init;
	 // 1.使能APB2的时钟
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	 //2.相关结构体配置 
	  Led_init.GPIO_Mode  =   GPIO_Mode_Out_PP ;
	  Led_init.GPIO_Pin   = 	GPIO_Pin_13 ;  
	  Led_init.GPIO_Speed =   GPIO_Speed_10MHz ;
	
	 GPIO_Init(GPIOC , &Led_init );
}

(二)继电器配置

1.头文件relay.h

#include "stm32f10x.h"
void Relay_Init(void);

2.源程序

#include "stm32f10x.h"
#include "relay.h"


void Relay_Init(void)
{
	
	GPIO_InitTypeDef  Relay_Init;
	//1.配置时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA   , ENABLE);
	
	//2.配置结构体
	Relay_Init.GPIO_Mode  =  GPIO_Mode_Out_PP;	
	Relay_Init.GPIO_Pin   =  GPIO_Pin_3 ;
	Relay_Init.GPIO_Speed =  GPIO_Speed_10MHz ;
	//初始化函数
	GPIO_Init(GPIOA , &Relay_Init );
	
}

(三)震动传感器

1.头文件

#include "stm32f10x.h"
void Shake_Init(void);

2.源程序

#include "shake.h"
#include "stm32f10x.h"


void Shake_Init(void)
{
	
	GPIO_InitTypeDef  shake_init;
	//打开GPIOA时钟  A1
	
	//2.配置GPIO结构体
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  , ENABLE);
	
	shake_init.GPIO_Mode  =   GPIO_Mode_IPD  ;//ÏÂÀ­µÍµçƽÕð¶¯
	shake_init.GPIO_Pin   =   GPIO_Pin_1 ;
	shake_init.GPIO_Speed =   GPIO_Speed_10MHz ;
	
	GPIO_Init(GPIOA ,&shake_init );
}

五、代码整合主函数main.c

#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "relay.h"
#include "shake.h"

 
//延时函数
void Delay(uint16_t time)
{
	uint16_t i=0;
	while(time--)
	{
		i=12000;
		while(i--);
	}
	
}

	
int  main()
{
	
	Led_Init();    //led初始化
	Relay_Init();  //继电器初始化
	Shake_Init();  //震动传感器初始化
	GPIO_SetBits(GPIOA, GPIO_Pin_3 );   //初始化继电器为高电平
   while(1)
	 {

	/*	GPIO_ResetBits(GPIOC, GPIO_Pin_13);
		Delay(1000);
		GPIO_SetBits(GPIOC, GPIO_Pin_13);
		Delay(1000);
	*/
		// GPIO_ResetBits(GPIOA,GPIO_Pin_3);  //À­µÍº¯Êý
		 if(GPIO_ReadInputDataBit (GPIOA ,GPIO_Pin_1 ) == 0)
		 {
			 GPIO_ResetBits(GPIOA, GPIO_Pin_3);  //拉低继电器
			 Delay(1000);                          //延时1s
			 GPIO_SetBits(GPIOA, GPIO_Pin_3);     //拉高继电器
		 }
		 else
		 {
			  GPIO_SetBits(GPIOA, GPIO_Pin_3);
		 }

	 }
		    
}



*注意因为在程序中有很多头文件是我们自己建立的,在编译的时候可能会出现警告,下面我们需要配置一下我们所放头文件的路径
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述根据上面的配置后再次编译后就不会出现问题了,然后我们在下载到开发板,将led通过杜邦线接好就可以实现我们的震动开灯了,具体的接线就不做介绍了,也可以查看其它博主滴

路漫漫其修远兮,每天进步一点点 (加油鸭)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小殷学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值