STM32初学(笔记一)使用库函数让LED灯闪烁


前言

在初学stm32中对库函数和使用,获取函数的功能及使用方法,LED灯初始化函数等的学习。其中GPIO口的常用函数,GPIO外设库文件的使用,stm32f10x_gpio.c,stm32f10x_gpio.h,stm32f10x_rcc.h的使用和参数查看和宏定义等的操作。


提示:

一、硬件设计

1.原理图

		1.1  stm32f103zet6 最小系统板原理图和PCB板

在这里插入图片描述
PCB板
在这里插入图片描述
1.2 led灯电路
在这里插入图片描述
在这里插入图片描述

二、软件设计

1.main.h

代码如下(示例):

#include "system.h"
#include "led.h"


/*******************************************************************************
*函数名         : delay
*函数功能		   :延时函数,通过while循环占用CPU,达到延时功能
* 输入       : i
* 输出         : 无
*******************************************************************************/
void delay(u32 i)
{
	while(i--);
}

/*******************************************************************************
* 函数名         : main
* 函数功能	   : 主函数
* 输入       : 无
* 输出       : 无
*******************************************************************************/
int main()
{
	LED_Init();
	while(1)
	{
		led1=!led1;
		delay(3000000);
		led2=!led2;
		delay(3000000);
		led3=!led3;
		delay(3000000);
		led4=!led4;
		delay(3000000);
		led5=!led5;
		delay(3000000);
		led6=!led6;
		delay(3000000);
		led7=!led7;
		delay(3000000);
		GPIO_SetBits(LED_PORT,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
		delay(3000000);
		GPIO_ResetBits(LED_PORT,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
		delay(3000000);
		GPIO_SetBits(LED_PORT,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
		delay(3000000);
		GPIO_ResetBits(LED_PORT,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
		delay(3000000);
		GPIO_SetBits(LED_PORT,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
		delay(3000000);
		GPIO_ResetBits(LED_PORT,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
		delay(3000000);
		GPIO_SetBits(LED_PORT,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
		delay(3000000);
		GPIO_ResetBits(LED_PORT,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
		delay(3000000);
		
	}
}

2.led.c

代码如下(示例):

#include "led.h"

/*******************************************************************************
* 函数名         : LED_Init
* 函数功能		   : LED³õʼ»¯º¯Êý
* 输入        : 无
* 输出        : 无
*******************************************************************************/
void LED_Init()
{
	GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
	
	RCC_APB2PeriphClockCmd(LED_PORT_RCC,ENABLE);
	//定义GPIO时钟函数
	GPIO_InitStructure.GPIO_Pin=LED_PIN;  //选择要设置的IO口
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;	 //设置挽输出模式
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	  //设置传输速率
	GPIO_Init(LED_PORT,&GPIO_InitStructure); 	   //初始化GPIO口
	
	GPIO_SetBits(LED_PORT,LED_PIN);   
}




该处使用的url网络请求的数据。


3.led.h

代码如下(示例):

#ifndef _led_H
#define _led_H

#include "system.h"

/*  LED时钟端口.引脚的定义 */
#define LED_PORT 			GPIOC   
#define LED_PIN 			(GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)
#define LED_PORT_RCC		RCC_APB2Periph_GPIOC


#define led1 PCout(0)  	//D1指示灯连接的是PC0管脚
#define led2 PCout(1)  	
#define led3 PCout(2)	
#define led4 PCout(3)
#define led5 PCout(4)
#define led6 PCout(5)
#define led7 PCout(6)
void LED_Init(void);


#endif

该处使用的url网络请求的数据。


三、实物视屏

STM32F103zet6初学(实现一)控制LED灯规律闪烁

总结

1.在GPIO初始化中掌握的GPIO函数
结构体变量函数:
GPIO_InitTypeDef GPIO_InitStructure;

选中引脚函数
GPIO_InitTypeDef.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1

管脚输出电平函数-----对BSRR寄存器操作
GPIO_SetBits(GPIO_TypeTypeDefGPIO,uint16_t GPIO_Pin);//高电平
GPIO_RestBits( ,);//低电平输出

设置端口管脚电平
GPIO_WriteBit( , );//写入
GPIO_WriteBit( , uint16_t PortVal);//写入全部

读取管脚输入电平
uint8_t GPIO_ReadInPutDataBit(GPIO TypeDefGPIO,uint 16_t GPIO_Pin);//读取哪个管脚输入
GPIO_ReadoutPutDataBit //读取输出

uint16_t GPIO_ReadInputData(GPIO_TypeDefGPIO_TypeDefGPIO*);//读取某组的管脚的输入
GPIO_ReadoutPutData //读取某组的输出

使能GPIO时钟函数
RCC_APB2PeriPhclockCmd(uint 32_t RCC_APB2Periph,FunctionalState NewState);

使能GPIO端口时钟函数
RCC_APB2periphClock cmd(RCC_APB2Periph);

2.刚开始接触对库函数和寄存器的认识。寄存器版代码是直接对内部寄存器操作,这要求你对底层的寄存器非常熟悉。固件库版是用ST提供的库函数开发,直接调用就行了

  • 2
    点赞
  • 4
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论 1

打赏作者

嵌小鑫

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值