• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

STM32F103RCT6闪烁LED灯

人工智能 思索与猫 1346次浏览 0个评论

原理:

  注意:这里使用迷你版,其他版本IO口设置不同,详细请查询原理图  
STM32F103RCT6闪烁LED灯   由图可知:LED0是PA8,LED1是PD2,且都是共阳极,高电平灭,低电平亮 所以只需要控制这两个IO口的电平就能实现LED灯的闪烁了。   GPIO口设置前要先进行时钟的使能!!! (外设,包括GPIO使用前都要先使能相应的时钟!!)   同时设置为推挽输出(可以准确输出高低电平) 还要设置输出速度。   由于STM32都是使用相应的底层,所以要记住以下几个函数:  

  • 1个初始化函数

 

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

 

  • 2个读取输入电平函数

 

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

 

  • 4个设置输出电平函数

 

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

 

主要代码:

  main.c  

******************************************************************************
* 文件名:LED灯
* 描  述:L1,L2每隔500ms闪烁一次
* 作  者:思索与猫
* 日  期: 19/4/1
* 备  注: 
*         
******************************************************************************
#include "stm32f10x.h"                  // Device header
#include "led.h"
#include "delay.h"

int main()
{
		delay_init();        //延时函数初始化
		LED_Init();		     //LED灯初始化
		while(1)
		{
				GPIO_SetBits(GPIOA,GPIO_Pin_8);      //PA8,PD2高电平,L0,L1灭
				GPIO_SetBits(GPIOD,GPIO_Pin_2);
//下方代码为更简单的对位操作IO口,实现LED灯亮灭
//				PAout(8) = 1;    
//				PDout(2) = 1;

				delay_ms(500);					     //延时500ms
				GPIO_ResetBits(GPIOA,GPIO_Pin_8);    //PA8,PD2低电平,L0,L1亮
				GPIO_ResetBits(GPIOD,GPIO_Pin_2);
//				PAout(8) = 0;
//				PDout(2) = 0;

				delay_ms(500);
		}
}

  led.h  

#ifndef __LED_H
#define __LED_H

void LED_Init(void);

#endif

  led.c  

#include<led.h>
#include<stm32f10x.h>

void LED_Init()
{
		GPIO_InitTypeDef GPIO_InitStructure;          //定义一个结构体
		
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE);	
		//PA,PD时钟使能,这里使用了或运算
		

		//定义PA8 GPIO口设置
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;         //设置引脚
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置输出速度
		GPIO_Init(GPIOA,&GPIO_InitStructure);   		  //初始化GPIO口
		GPIO_SetBits(GPIOA,GPIO_Pin_8);                   //PA8输出高电平,L0灭
	
		
		//定义PD2 GPIO口设置
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; 		  //设置引脚
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置输出速度
		GPIO_Init(GPIOD,&GPIO_InitStructure);	 		  //初始化GPIO口
		GPIO_SetBits(GPIOD,GPIO_Pin_2);					  //PD2输出高电平,L1灭
}

 


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明STM32F103RCT6闪烁LED灯
喜欢 (2)

您必须 登录 才能发表评论!

加载中……