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

单片机库函数-io输出操作

1、需要使用模块

使用库函数做跑马灯,要用到:

misc.h

misc.c

时钟模块:

stm32f10x_rcc.h

stm32f10x_rcc.c

gpio模块:

头文件:stm32f10x_gpio.h
源文件:stm32f10x_gpio.c

2、库函数

2.1、初始化GPIO

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

2.2、2个读取输入电平

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

2.3、2个读取输出电平

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

2.4、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);

3、步骤

 a、使能io时钟 

         void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

b、初始化io口    

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

c、操作io口,输出高低电平  

        void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);  // 拉高引脚输出电平
        void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); // 拉低引脚输出电平

4、呼吸灯实现代码

        4.1、库函数实现

                led.c                

void led_init(void)
{ 
	//PB11
	GPIO_InitTypeDef gpio_InitTypeDef;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	gpio_InitTypeDef.GPIO_Mode=GPIO_Mode_Out_PP;
	gpio_InitTypeDef.GPIO_Pin=GPIO_Pin_11;
	gpio_InitTypeDef.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOB,&gpio_InitTypeDef);
	GPIO_ResetBits(GPIOB,GPIO_Pin_11);
}

        main.c        

void main()
{
	led_init();
	
	while(1)
	{
		GPIO_SetBits(GPIOB,GPIO_Pin_11);
		delay(500);
		GPIO_ResetBits(GPIOB,GPIO_Pin_11);
		delay(500);		
	}
}

        4.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 ijһλÊä³ö
#define PAin(n) 		BIT_ADDR(GPIOA_IDR_Addr,n) //GPIOA ijһλÊäÈë
#define PBout(n) 		BIT_ADDR(GPIOB_ODR_Addr,n) //GPIOB ijһλÊä³ö
#define	PBin(n) 		BIT_ADDR(GPIOB_IDR_Addr,n) //GPIOB ijһλÊäÈë
#define PCout(n)		BIT_ADDR(GPIOC_ODR_Addr,n) //GPIOC ijһλÊä³ö
#define PCin(n) 		BIT_ADDR(GPIOC_IDR_Addr,n) //GPIOC ijһλÊäÈë
#define PDout(n) 		BIT_ADDR(GPIOD_ODR_Addr,n) //GPIOD ijһλÊä³ö
#define PDin(n) 		BIT_ADDR(GPIOD_IDR_Addr,n) //GPIOD ijһλÊäÈë
#define PEout(n) 		BIT_ADDR(GPIOE_ODR_Addr,n) //GPIOE ijһλÊä³ö
#define PEin(n) 		BIT_ADDR(GPIOE_IDR_Addr,n) //GPIOE ijһλÊäÈë


#endif
void main()
{
	led_init();
	
	while(1)
	{
		PBout(11) = 1;
		delay(500);
		PBout(11) = 0;
		delay(500);		
	}
}


http://www.kler.cn/a/457996.html

相关文章:

  • [CCGridW 2023]Performance Modelling of Graph Neural Networks
  • 【蓝桥杯——物联网设计与开发】拓展模块4 - 脉冲模块
  • 【python中级】打包pyd时检查MSVC 编译器
  • 线性代数期末复习 [基础篇]
  • 后端技术面试38讲之程序为什么会崩溃?
  • HTML——20 自定义属性
  • PostgreSQL synchronous_commit 参数
  • 大模型训练(1):流水线并行
  • 【运维】Win跨局域网远程链接
  • 基本算法——分类
  • 数字图像处理
  • 学系C++:循环练习案例
  • 【bluedroid】A2dp Source播放流程源码分析(4)
  • Microsoft SQL Serve的下载与安装
  • Android笔试面试题AI答之非技术问题(3)
  • 区块链web3 基础知识,包括ABI、EIP、ERC等
  • 2011-2019年各省总抚养比数据
  • 【Nginx系列】---Nginx配置tcp转发
  • 一般方法求任意次方的近似值递推式
  • C++笔记之格式化字符串
  • python+panddleocr+文本识别训练导出测试
  • GSM长短信的消息头解析及短信体解析(包含UDHI指示语)
  • Redis是如何处理过期键的
  • 前缀树介绍
  • Docker应用-项目部署及DockerCompose
  • 探索数据的艺术:R语言与Origin的完美结合