STM32学习过程记录1——端口的输出设置

从今天起,开始学习32,这个作为学习资料的整理。有51的基础,具体功能的实现写在这儿,只会写32的特殊的地方。所以具体不会太详细(可能也有错,如果您顺路看的时候发现了错误,请斧正,感激不尽)

目录

第一课,跑马灯(端口的输出设置)

一.端口配置

1.个人理解的概念

2.端口的配置

3.头文件的定义

二.程序的输出代码

三.头文件的定义方法

四.该节涉及到的资料和未整理部分

1.头文件快速模板

2.端口定义的快速模板:

3.输出模式选择:

4.PPT内其他内容整理


第一课,跑马灯(端口的输出设置)

一.端口配置

1.个人理解的概念

首先,我们要打开32的端口时钟,芯片为了省电,所以所有的端口都是关闭的。我们需要通过打开时钟给端口激活。所以我们32的端口配置过程为:打开时钟---配置端口。

2.端口的配置

首先,我们需要用命令打开时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);

该参数表示,激活A D两口的端口。然后我们需要对端口进行输出设置,可以使用如下结构体:

GPIO_InitTypeDef  GPIO_InitStructure;

 该结构体,则是GPIO口的配置,接下来我们可以设置它的“公用”参数,比如输出模式,输出速度:

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz

设置好了它的输出模式和速度,我们就可以对一个IO口进行配置了:

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;			 //选择管脚
 GPIO_Init(GPIOA, &GPIO_InitStructure);				 //生效更改于GPIOA

所以,两个IO口的设置可能看起来是这样:

void LED_Init(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 
 GPIO_Init(GPIOA, &GPIO_InitStructure);					 

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;	    		 
 GPIO_Init(GPIOD, &GPIO_InitStructure);	  				 
}

3.头文件的定义

头文件的定义可以让我们的代码风格像51一样,如LED=1,其定义方式如下:(注意#define后面没有分号)

#define LED0 PAout(8)

 该定义约等于51的  sbit LED0 = PA.8

二.程序的输出代码

32的高低电平输出的方法有几个,如以下代码:

GPIO_ResetBits(GPIOA,GPIO_Pin_8);        //LED0输出低
GPIO_SetBits(GPIOD,GPIO_Pin_2);        //LED1输出高

PAout(8)=0;        //LED0输出低
PDout(2)=1;        //LED1输出高

三.头文件的定义方法

除了头文件的.c内容,我们的头文件.h还需要额外的内容:

#ifndef __NAME_H        //头文件的开始标志,只需要替换NAME为.h的名字即可
#define __NAME_H

#include "sys.h"        //头文件的引用

#define LED0 PAout(8)	//常量的定义
#define LED1 PDout(2)	

void LED_Init(void);    //函数的前引用

		 				    
#endif                  //文件结束标志

四.该节涉及到的资料和未整理部分

1.头文件快速模板

#ifndef __ _H        
#define __ _H

#include       

#define 
	 				    
#endif                  

2.端口定义的快速模板

void _Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 
 GPIO_Init(GPIOA, &GPIO_InitStructure);					
}

3.输出模式选择

1、浮空输入GPIO_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
2、带上拉输入GPIO_IPU ——IO内部上拉电阻输入
3、带下拉输入GPIO_IPD —— IO内部下拉电阻输入
4、模拟输入GPIO_AIN ——应用ADC模拟输入,或者低功耗下省电
5、开漏输出GPIO_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能

6、推挽输出GPIO_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
7、复用功能的推挽输出GPIO_AF_PP ——片内外设功能(I2C的SCL,SDA)
8、复用功能的开漏输出GPIO_AF_OD ——片内外设功能(TX1,MOSI,MISO.SCK.SS)

4.PPT内其他内容整理

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

2个读取输出电平函数:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(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);

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康娜喵

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值