首页 > 其他分享 >野火stm32指南者开发板点亮LED

野火stm32指南者开发板点亮LED

时间:2023-08-12 09:44:08浏览次数:48  
标签:GPIOB LED int void unsigned 开发板 stm32 BASE define

目录

1.芯片手册中的LED电路图

图1

2.官网手册

图2
图3

3.代码演示

3.1 stm32f10x.h头文件

#ifndef _STM32F10X_H
#define _STM32F10X_H


/*片上外设基地址 */
#define PERIPH_BASE ((unsigned int)0x40000000)
// APB1 总线基地址
#define APB1PERIPH_BASE PERIPH_BASE
// APB2 总线基地址
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
// AHB 总线基地址
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)


/* GPIOB */
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
// 端口配置低寄存器 PB0-PB7 配置是输入还是输出
#define GPIOB_CRL			*(unsigned int*)(GPIOB_BASE+0x00)
	// 端口配置高寄存器 PB8-PB15 配置是输入还是输出 
#define GPIOB_CRH			*(unsigned int*)(GPIOB_BASE+0x04)
#define GPIOB_IDR			*(unsigned int*)(GPIOB_BASE+0x08)
// 端口输出数据寄存器 配置PB0-PB15是高电平还是低电平
#define GPIOB_ODR			*(unsigned int*)(GPIOB_BASE+0x0C)
#define GPIOB_BSRR	  *(unsigned int*)(GPIOB_BASE+0x10)
#define GPIOB_BRR			*(unsigned int*)(GPIOB_BASE+0x14)
#define GPIOB_LCKR		*(unsigned int*)(GPIOB_BASE+0x18)

/* 时钟端口 */
#define RCC_BASE (AHBPERIPH_BASE + 0x1000)
// GPIOB所在的时钟端口
#define RCC_APB2ENR  (*(unsigned int *)(RCC_BASE + 0X18))


#endif

3.2 点亮绿灯

#include "stm32f10x.h"

void SystemInit(void){

}

int main(void){
	
	// 打开 GPIOB 端口的时钟
	RCC_APB2ENR  |=  ( (1) << 3 );
	
	// 配置IO口为推挽输出,这里将图2中的CNF0和MODE0都置0
	GPIOB_CRL &=  ~( (0x0f) << (4*0) );
	// 这里将图2中的MODE0变成01
	GPIOB_CRL |=  ( (1) << (4*0) );
	
	// 控制 ODR 寄存器,这行代码省略也可以使灯亮,这里将图3中的ODR0置0
	GPIOB_ODR &= ~(1<<0);
	while(1);
}

3.3 点亮蓝灯

#include "stm32f10x.h"

void SystemInit(void){

}

int main(void){
	
	// 打开 GPIOB 端口的时钟
	RCC_APB2ENR  |=  ( (1) << 3 );
	
	// 配置IO口为推挽输出,这里将图2中的CNF1和MODE1都置0
	GPIOB_CRL &=  ~( (0x0f) << (4*1) );
	// 这里将图2中的MODE1变成01
	GPIOB_CRL |=  ( (1) << (4*1) );
	
	// 控制 ODR 寄存器,这行代码省略也可以使灯亮,这里将图3中的ODR1置0
	GPIOB_ODR &= ~(1<<0);
	while(1);
}

3.4 点亮红灯

#include "stm32f10x.h"

void SystemInit(void){

}

int main(void){
	
	// 打开 GPIOB 端口的时钟
	RCC_APB2ENR  |=  ( (1) << 3 );
	
	// 配置IO口为推挽输出,这里将图2中的CNF5和MODE5都置0
	GPIOB_CRL &=  ~( (0x0f) << (4*1) );
	// 这里将图2中的MODE5变成01
	GPIOB_CRL |=  ( (1) << (4*1) );
	
	// 控制 ODR 寄存器,这行代码省略也可以使灯亮,这里将图3中的ODR5置0
	GPIOB_ODR &= ~(1<<0);
	while(1);
}

3.5 LED灯闪烁,绿灯闪烁 。

#include "stm32f10x.h"

typedef unsigned int uns32_t;

void SystemInit(void){

}

void delay(uns32_t count)
{
	for( ; count !=0; count-- );
}


int main(void){
	
	// 打开 GPIOB 端口的时钟
	RCC_APB2ENR  |=  ( (1) << 3 );
	
	// 配置IO口为输出
	GPIOB_CRL &=  ~( (0x0f) << (4*0) );
	GPIOB_CRL |=  ( (1) << (4*0) );
	
	// 控制 ODR 寄存器
	GPIOB_ODR &= ~(1<<0);
	  while(1){
		GPIOB_ODR &= ~(1<<0);
		delay(0xFFFFF);
		GPIOB_ODR |= (1<<0);
		delay(0xFFFFF);
	}
	
}

3.6 红绿蓝三色LED灯切换闪烁

#include "stm32f10x.h"

// 绿灯对应的是PB0
#define GREEN_LED (0)
// 蓝灯对应的是PB1
#define BLUE_LED (1)
// 红灯对应的是PB5
#define RED_LED (5)

typedef unsigned int uns32_t;

void open_port(int n){
	/* 配置端口输出,PBn 0100 -> 0011  */
	// MODEn[1:0]:00 -> 11
	GPIOB_CRL |=  ( 3 << (4*n) );
	// CNFn[1:0]:01 -> 00
	GPIOB_CRL &=  ~( 3 << (4*n+2) );
}

void close_port(int n){
	/* 复位端口,PBn 0011 -> 0100  */
	// MODEn[1:0]:00 -> 11
	GPIOB_CRL &=  ~( 3 << (4*n) );
	// CNFn[1:0]:01 -> 00
	GPIOB_CRL |=  ( 1 << (4*n+2) );
}

void SystemInit(void){

}

void delay(uns32_t count)
{
	for( ; count !=0; count-- );
}

void blue(){
	// 绿灯关
	close_port(GREEN_LED);
	
	// 蓝灯开
	open_port(BLUE_LED);
}

void green(){
	// 红灯关
	close_port(RED_LED);
	
	// 绿灯
	open_port(GREEN_LED);
}

void red(){
	
	// 蓝灯关
	close_port(BLUE_LED);
	
	// 红灯开
	open_port(RED_LED);
}

int main(void){
	
	/* 打开 GPIOB 端口的时钟 */
	RCC_APB2ENR  |=  ( (1) << 3 );
	
	/* 配置端口输出,PB5 0100 -> 0011 ,这里配置的是红灯开 */
	// MODE5[1:0]:00 -> 11
	GPIOB_CRL |=  ( 3 << (4*5) );
	// CNF5[1:0]:01 -> 00
	GPIOB_CRL &=  ~( 3 << (4*5+2) );
	
	while(1){
		delay(0xfffff);
		green();
		delay(0xfffff);
		blue();
		delay(0xfffff);
		red();
	}
	
}

标签:GPIOB,LED,int,void,unsigned,开发板,stm32,BASE,define
From: https://www.cnblogs.com/wbnyua/p/stm32_01.html

相关文章

  • 世微AP2400 电动车 摩托车灯照明 汽车灯照明 手电筒照明LED灯降压恒流驱动IC
    PCB布板参考1.大电流路径走线要粗,铺铜走线比较好。2.大电路回路面积以最短、最宽路径完成比较好。3.开关切换连接点:电感L、开关管漏级与续流肖特基二极管,走线要短与粗,铺铜走线比较好,但同时需要适当面积作为电感、IC与二极管散热。4.Vin端的输入电容要靠近输入端和CS......
  • MT6853天玑720MTK安卓核心板_5G智能模块安卓主板开发板定制
    联发科MT6853天玑720安卓核心板采用台积电7nm制程的5GSoC,具有先天的节能创新是同类产品中效率最高的5G芯片。除了完全集成的5G调制解调器,联发科5GUltraSave提供了一系列额外的节能技术。Dimensity720比替代芯片具有更快的LPDDR4X和更快的UFS2.2级存储。与八核CPU一起,具有两个强......
  • kettle 调用ssl异常javax.net.ssl.SSLHandshakeException: No appropriate protocol (
    javax.net.ssl.SSLHandshakeException:Noappropriateprotocol(protocolisdisabledorciphersuitesareinappropriate  调用kettle发送邮件的时候本地没问题 服务器报异常 查看很多都是要改动 D:\java\jdk\jre\lib\security 下面的 java.security文件 ......
  • 知识图谱(Knowledge Graph)- Neo4j 5.10.0 CentOS 安装
    系统需求版本JDKCPU内存硬盘Neo4j5.x17Intelx86-x64Corei3minimum,Corei7recommended.AMDx86-x64,MacARM.最低2GB,推荐16GB+10G+Neo4j5.x11Neo4j5.x8JDK17下载:https://www.oracle.com/java/technologies/do......
  • XMLHttpRequest发送请求报错:Failed to execute 'send' on 'XMLHttpRequest': Failed t
    1、问题源:url:http://localhost:8099/api/testconstxhr=newXMLHttpRequest();xhr.open('post',url,false);xhr.setRequestHeader("Content-type","application/json");varstr=JSON.stringify(uid)xhr.send(str);......
  • Debug Assertion Failed! Program: C:\Windows\SYSTEM32\mfc140ud.dll
    新建C++ MFC项目多文本对话框的模板,运行出错。解决办法:这是由于DockControlBar(&m_wndToolBar);引起的异常。在头文件MainFrm.h中重新定义  CMFCToolBar m_wndToolBar; 类型DockControlBar(&m_wndToolBar)改为DockPane(&m_wndToolBar);再次运行就不会出错了。......
  • 知识图谱(Knowledge Graph)根本概念
    目录知识图谱定义基础概念:知识图谱构建的关键技术知识图谱的构建实体命名识别知识抽取实体统一指代消解知识图谱的存储RDF和图数据库的主要特点区别知识图谱能干什么反欺诈不一致性验证客户失联管理知识推理常见图数据库2012年5月17日,Google正式提出了知识图谱(KnowledgeGraph)的......
  • 谷粒商城报错:java.lang.IllegalStateException: Failed to load property source from
    遇到这种问题如果检查了配置文件没有出错可以尝试打开target文件,去找配置文件,查看是否为空或者中文乱码,一般情况下删除中文注释就可以,因为这个文件的编码格式是GBK,项目的编码格式是UTF-8,注释乱码,导致编译失败。还有另一种做法就是更改编码。......
  • 01-了解STM32以及ARM
    目录一.ARM概念二.什么是STM32一.ARM概念1.ARM全称AcornRISCMachine(英国Acorn公司精简指令集机器).ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省35%,却能保留32位系统的所有优势.2.Acorn公司在英国,它本身并不生产芯片而是为芯片厂......
  • stm32 HAL UART DMA 发送
    MCU STM32H743IIT6     constuint8_tTEXT_TO_SEND[]={"ALIENTEKApolloSTM32H7DMA"};constuint8_tTEXT_TO_SEND2[]={"helloworld!"};externUART_HandleTypeDefhuart1;intmain(void){/*USERCODEBEGIN1*//*USERCODE......