当前位置: 首页 > news >正文

1、单片机寄存器-io输入实验笔记

1、硬件

时钟总线如下:

PB端口挂载在AHB1总线上,因此要对该位进行使能。

引脚

LED0和LED1挂载在PB0和PB1上:推挽输出、100M、 上拉默认高电平,低电平点亮。

2、软件

位带操作

#ifndef _IO_BIT_H_
#define _IO_BIT_H_#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
//F103XXIO
#define GPIOA_ODR_Addr (GPIOA_BASE+0x0C) //0x40020014
#define GPIOB_ODR_Addr (GPIOB_BASE+0x0C) //0x40020414 
#define GPIOC_ODR_Addr (GPIOC_BASE+0x0C) //0x40020814
#define GPIOD_ODR_Addr (GPIOD_BASE+0x0C) //0x40020C14
#define GPIOE_ODR_Addr (GPIOE_BASE+0x0C) //0x40021014
#define GPIOA_IDR_Addr (GPIOA_BASE+0x08) //0x40020010
#define GPIOB_IDR_Addr (GPIOB_BASE+0x08) //0x40020410
#define GPIOC_IDR_Addr (GPIOC_BASE+0x08) //0x40020810
#define GPIOD_IDR_Addr (GPIOD_BASE+0x08) //0x40020C10
#define GPIOE_IDR_Addr (GPIOE_BASE+0x08) //0x40021010//F103XXI0 口操作,只对单一的I0 口,n 的值范围[0-15]
#define PAout(n) 		BIT_ADDR(GPIOA_ODR_Addr,n) //GPIOA 
#define PAin(n) 		BIT_ADDR(GPIOA_IDR_Addr,n) //GPIOA 
#define PBout(n) 		BIT_ADDR(GPIOB_ODR_Addr,n) //GPIOB 
#define	PBin(n) 		BIT_ADDR(GPIOB_IDR_Addr,n) //GPIOB 
#define PCout(n)		BIT_ADDR(GPIOC_ODR_Addr,n) //GPIOC 
#define PCin(n) 		BIT_ADDR(GPIOC_IDR_Addr,n) //GPIOC 
#define PDout(n) 		BIT_ADDR(GPIOD_ODR_Addr,n) //GPIOD 
#define PDin(n) 		BIT_ADDR(GPIOD_IDR_Addr,n) //GPIOD 
#define PEout(n) 		BIT_ADDR(GPIOE_ODR_Addr,n) //GPIOE 
#define PEin(n) 		BIT_ADDR(GPIOE_IDR_Addr,n) //GPIOE #endif

led.h

#ifndef __LED_H
#define __LED_H	 
#include "sys.h" #define LED0 PBout(1)	// DS0
#define LED1 PBout(0)	// DS1	 void LED_Init(void);//初始化
#endif

led.c

void LED_Init(void)
{    	 RCC->AHB1ENR|=1<<1;//PB端口使能GPIO_Set(GPIOB,PIN0|PIN1,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB0,PB1端口配置LED0=1;//LED0关闭LED1=1;//LED1关闭
}

main.c

#include "sys.h"
#include "delay.h" 
#include "led.h"int main(void)
{ Stm32_Clock_Init(360,25,2,8);//设置时钟180MHzdelay_init(180);		// 初始化延迟函数LED_Init();				// 灯的初始化函数while(1){LED0=0;				// LED0亮LED1=1;				// LED1灭delay_ms(500);LED0=1;				// LED0灭LED1=0;				// LED1亮delay_ms(500);}
}

http://www.lryc.cn/news/513737.html

相关文章:

  • 记忆旅游系统|Java|SSM|VUE| 前后端分离
  • CentOS7下的 OpenSSH 服务器和客户端
  • RabbitMQ基础篇之Java客户端 Topic交换机
  • 微服务-Sentinel新手入门指南
  • 传统听写与大模型听写比对
  • http性能测试命令ab
  • 前端:轮播图常见的几种实现方式
  • Pytest基础01: 入门demo脚本
  • ruoyi 多租户 开启后针对某一条sql不适用多租户; 若依多租户sql规则修改
  • driftingblues6靶机
  • Neo4j GDS 2.0 安装与配置
  • A*算法与人工势场法结合的路径规划(附MATLAB源码)
  • BootstrapTable处理表格
  • UniApp 打开文件工具,获取文件类型,判断文件类型
  • docker-开源nocodb,使用已有数据库
  • Mysql COUNT() 函数详解
  • 单周期CPU电路设计
  • 从零开始采用命令行创建uniapp vue3 ts springboot项目
  • 跟着逻辑先生学习FPGA-实战篇第一课 6-1 LED灯闪烁实验
  • springboot 跨域配置
  • C语言宏和结构体的使用代码
  • 微信小程序 覆盖组件cover-view
  • 【Redis知识】Redis进阶-redis还有哪些高级特性?
  • 【Pytorch实用教程】深入了解 torchvision.models.resnet18 新旧版本的区别
  • 攻防世界 - Web - Level 3 | very_easy_sql
  • 使用Java Selenium修改打开页面窗口大小
  • 基于BiLSTM和随机森林回归模型的序列数据预测
  • 【Vim Masterclass 笔记04】S03L12:Vim 文本删除同步练习课 + S03L13:练习课点评
  • [AI] 深度学习的“黑箱”探索:从解释性到透明性
  • 网络安全技能试题总结参考