STM32学习手记——GPIO的输入、输出、检测

发布者:cyzcee最新更新时间:2021-07-05 来源: eefocus关键字:STM32  GPIO  输入  输出  检测 手机看文章 扫描二维码
随时随地手机看文章

简介:本例程演示如何操作GPIO输入和输出。通过检测USER1、USER2按键的状态,点亮不同的LED,同时输出键值到串口1。


按键口线分配:


* USER1键     : PC6  (低电平表示按下)


* USER2键     : PC7  (低电平表示按下)


*


* LED口线分配:


* LED1 : PE0  (输出0点亮)


* LED2 : PE1  (输出0点亮)


*


*/


#include "stm32f10x_lib.h"



GPIO_InitTypeDef GPIO_InitStructure;



extern u32 TimingDelay;



/*********************************************************************************


* 函数名称    :void RCC_Configuration()


* 功能描述    : 复位和时钟控制 配置


* 参数        :  无


* 返回值      :  无


* 全局变量    :  无


* 全局静态变量:  无


* 局部静态变量:  无


*********************************************************************************/


void RCC_Configuration()


{


ErrorStatus HSEStartUpStatus;     //定义外部高速晶振启动状态枚举变量


RCC_DeInit();     //复位RCC外部寄存器到默认值


RCC_HSEConfig(RCC_HSE_ON);     //打开外部高速晶振


HSEStartUpStatus=RCC_WaitForHSEStartUp();     //等待外部高速时钟准备好



if(HSEStartUpStatus==SUCCESS){ //外部高速时钟已经准备好



FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的用法,位置:RCC初始化子函数里面,时钟起振之后


FLASH_SetLatency(FLASH_Latency_2); //FLASH时序延迟几个周期,等待总线同步操作。推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。



RCC_HCLKConfig(RCC_SYSCLK_Div1);       //配置AHB(HCLK)==系统时钟/1


RCC_PCLK2Config(RCC_HCLK_Div1); //配置APB2(高速)(PCLK2)==系统时钟/1 


RCC_PCLK1Config(RCC_HCLK_Div2); //配置APB1(低速)(PCLK1)==系统时钟/2


//注:AHB主要负责外部存储器时钟。PB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。




RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //配置PLL时钟==(外部高速晶体时钟/1)* 9 ==72MHz


RCC_PLLCmd(ENABLE); //使能PLL时钟


while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET); //等待PLL时钟就绪


RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //配置系统时钟==PLL时钟


while(RCC_GetSYSCLKSource()!=0x08); //等待系统时钟源的启动


}



//------------------------以下为开启外设时钟的操作-----------------------//


//   RCC_AHBPeriphClockCmd (ABP2设备1 | ABP2设备2 , ENABLE); //启动AHB设备


//   RCC_APB2PeriphClockCmd(ABP2设备1 | ABP2设备2 , ENABLE); //启动ABP2设备


//   RCC_APB1PeriphClockCmd(ABP2设备1 | ABP2设备2 , ENABLE); //启动ABP1设备



RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC,ENABLE);   //打开APB2外设



/*********************************************************************************


* 函数名称    :GPIO_Configuration()


* 功能描述    : GPIO配置


* 参数        :  无


* 返回值      :  无


* 全局变量    :  无


* 全局静态变量:  无


* 局部静态变量:  无


*********************************************************************************/


void GPIO_Configuration()


{


GPIO_InitTypeDef GPIO_InitStructure;      //定义GPIO初始化结构体



GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;  //管脚位置定义,标号可以是NONE、ALL、0至15。


GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;  //输出速度2MHz


GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;  //推挽输出模式 Out_PP


GPIO_Init(GPIOE,&GPIO_InitStructure);  //E组GPIO初始化



GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;  //管脚位置定义


GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;  //输出速度2MHz  


GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;  //浮空输入 IN_FLOATING  


GPIO_Init(GPIOC,&GPIO_InitStructure);   //C组GPIO初始化



// 由于将GPIO设置为输出时,GPIO输出寄存器的值缺省是0,因此会驱动LED点亮


// 这是我们不希望的,因此在改变GPIO为输出前,先修改输出寄存器的值为1  


GPIO_SetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1);


}


/*********************************************************************************


* 函数名称    :SysTick_Configuration()


* 功能描述    : systick(系统滴答定时器)初始化函数


* 参数        :  无


* 返回值      :  无


* 全局变量    :  无


* 全局静态变量:  无


* 局部静态变量:  无


*********************************************************************************/


void SysTick_Configuration()


{


SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); //配置SysTick时钟==HCLK(AHB时钟) 



SysTick_SetReload(72000);    //若AHB时钟HCLK为72MHz,则计数72000耗时1ms



SysTick_ITConfig(ENABLE);    //SysTick中断使能


}


/*********************************************************************************


* 函数名称    :Delay(u32 nTime)


* 功能描述    : 精确延时函数


* 参数        :  nTime


* 返回值      :  无


* 全局变量    :  无


* 全局静态变量:  无


* 局部静态变量:  无


*********************************************************************************/


void Delay(u32 nTime)


{


SysTick_CounterCmd(SysTick_Counter_Enable);               //开启SysTick计数器



TimingDelay=nTime;


  


while(TimingDelay!=0);



SysTick_CounterCmd(SysTick_Counter_Disable);   //关闭SysTick计数器



SysTick_CounterCmd(SysTick_Counter_Clear);   //SysTick计数器的计数值清0



}



/*********************************************************************************


* 函数名称    :main()


* 功能描述    : 主函数


* 参数        :  无


* 返回值      :  无


* 全局变量    :  无


* 全局静态变量:  无


* 局部静态变量:  无


*********************************************************************************/


int main()


{



RCC_Configuration();


GPIO_Configuration();


SysTick_Configuration();



while(1){


if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==Bit_RESET){


GPIO_ResetBits(GPIOE,GPIO_Pin_0);


while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==Bit_RESET);


}


else{


GPIO_SetBits(GPIOE,GPIO_Pin_0); 


}


 


if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==Bit_RESET){


GPIO_ResetBits(GPIOE,GPIO_Pin_1);


while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==Bit_RESET);


}


else{


GPIO_SetBits(GPIOE,GPIO_Pin_1); 


}



}


关键字:STM32  GPIO  输入  输出  检测 引用地址:STM32学习手记——GPIO的输入、输出、检测

上一篇:STM32—IWDG独立看门狗的使用
下一篇:基于STM32的嵌入式语音识别模块设计

推荐阅读最新更新时间:2024-11-19 00:00

STM32 低功耗 stop模式
关键代码: 1. RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); 2. /** * @brief Configures system clock after wake-up from STOP: enable HSE, PLL * and select PLL as system clock source. * @param None * @retval None */ static void SYSCLKC
[单片机]
STM32 STM8开发工具(ST-LINK/V2)
简介: 这是一款完全兼容ST-LINK/V2的STM32 STM8开发工具,可以在线仿真、调试、下载全系列的STM8和STM32 MCU。并且拥有固件升级的功能,可支持ST公司未来的MCU开发。 本产品采用与官方版本完全一致的固件,所以完全兼容官方的ST-LINK/V2,具有相同的功能及使用方法。 并且,产品设计团队还对官方版本的硬件作了反复摸索、不断优化,使之既继承了官方版本优点,又对官方版本进行了超越;让用户使用起来更安全、更方便、更快捷、更高效! 创新的功能特点: 重新设计了电路架构及外壳,使工具更小巧、漂亮、易带,使用更安全、方便; 精心设计了内部电路,增加了多重保护措施,确保用户电脑、ST-
[单片机]
STM32中DMA的使用入门
今天刚看了一个ADC采集的程序,和之前用其他单片机写的程序还是有比较大的差别,这个差别主要就在DMA。这里面总结一下,有一部分是转载别人的。 什么是STM32的DMA?其全称是:Direct Memory Access;根据ST公司提供的相关信息,DMA是STM32中一个独立与Cortex-M3内核的模块,有点类似与ADC、PWM、TIMER等模块;主要功能是通信“桥梁”的作用,可以将所有外设映射的寄存器“连接”起来,这样就可以高速问各寄存器,其传输不受CPU的支配,传输还是双向的;例如,从“表面”上看,它可以将flash中的数据与储存器中变量建立通讯,还可以将一外设的积存器或缓冲器与另外设的寄存器或缓冲器建立双向通讯,有点像
[单片机]
STM8S103定时器1,定时器2多路PWM波输出
一、时钟配置 1、STM8S的4种时钟源可用做主时钟: ● 1-24MHz高速外部晶体振荡器(HSE) ● 最大24MHz高速外部时钟信号(HSE user-ext) ● 16MHz高速内部RC振荡器(HSI) ● 128KHz低速内部RC(LSI) STM8默认时钟源为16MHz高速内部RC振荡器(HSI) 对 CLK_CKDIVR设置可以设置时钟为HSI的分频 如 CLK_CKDIVR|= (uint8_t)0x00;/*设置时钟为内部16M高速时钟*/ 2分频为 CLK_CKDIVR=0x08;4分频为 CLK_CKDIVR=0x10;8分频为 CLK_CKDIVR=0x18; 二、定时器1设置
[单片机]
STM8S103定时器1,定时器2多路PWM波<font color='red'>输出</font>
Bourns发布全新大功率电流检测电阻器CSM2F系列
提供更稳健及高测量精度,有助于最大限度地提高运行性能并提高系统效率 2018年8月6日- 美国柏恩Bourns 全球知名电子组件领导制造供货商,今日推出最新的电流检测电阻,型号为CSM2F系列。除了Bourns的大功率电流检测电阻器外,新系列金属合金电流感应组件还采用电子束焊接到镀锡铜端子的金属合金组件制造,提供额外的机械强度并易于焊接,具有出色的电气特性,而其另一个优点则是它允许最低的热电动势(Thermal EMF)最低至0.25μV/ K 。 为了满足高电流且极低电阻要求,Bourns®型号CSM2F系列的电阻值可低至50毫欧(μΩ),连续电流高达1000 A,额定功率则高达50 W。为了提高设计灵活性,
[电源管理]
Bourns发布全新大功率电流<font color='red'>检测</font>电阻器CSM2F系列
你的电脑发热么?利用Fluke Ti25对笔记本检测
在购买笔记本时,除了配置之外,更加让人费心的就是笔记本的散热问题。众所周知,笔记本电脑的某一部位温度太高将严重影响使用寿命,笔记本的散热强度和均匀程度反映了笔记本厂家的设计水平。CCTV走近科学节目中利用FlukeTi25热象仪对四台顶级笔记本电脑在性能、设计质量和环保3方面做出了综合评估。 华丽外表下,最小的缺陷都将展露无疑。在这场顶级笔记本电脑之间的比拼中,Fluke红外热象仪快速、精准的鉴别了笔记本左、右掌托处,机体底部,散热出风口的温度。帮助评委团作出了权威的评价。 利用Fluke热像仪Ti25对笔记本的温度检测正是利用热成像的原理,对笔记本表面的温度测试,验证试验中各款笔记本的各个性能。 1.笔记
[测试测量]
大联大品佳集团力推基于Infineon的胎压检测解决方案
2015年3月19日,致力于亚太地区市场的领先电子元器件分销商 大联大控股宣布,其旗下品佳推出基于Infineon SP37的胎压监测解决方案。 根据相关部门及机构的统计数据,目前我国高速公路上70%的交通事故是由于轮胎气压所引发的:轮胎气压过高占20%,轮胎气压不足占57%,其他为23%。车速在160公里以上时发生爆胎,死亡率解决100%。因此,胎压监测系统(TPMS) 已成为继ABS、安全气囊之后的第三大汽车安全系统。 截止2014年,中国汽车保有量应为1.5亿辆左右,随着推出相关强制法规的呼声逐渐高涨,这一市场将急剧升温。从上述两图亦不难看出,未来几年包括中国在内全球TPMS市场必将迎来快速增长
[汽车电子]
大联大品佳集团力推基于Infineon的胎压<font color='red'>检测</font>解决方案
ARM7与FPGA在工控和故障检测中的应用
工业控制中往往需要完成多通道故障检测及多通道命令控制(这种多任务设置非常普遍),单独的CPU芯片由于其外部控制接口数量有限而难以直接完成多路检控任务,故利用ARM芯片与FPGA相结合来扩展检控通道是一个非常好的选择。这里介绍用Atmel公司ARM7处理器(AT91FR40162)和ALTERA公司的低成本FPGA芯片(cyclone2)结合使用完成多通道检控任务的一种实现方法。 各部分功能简介   图1为此系统的结构连接框图。如图所示,ARM芯片与FPGA芯片之间通过数据总线、地址总线及读写控制线相连,而与终端PC则通过串口通信;FPGA与目标设备通过命令控制总线和故障检测总线相连。                  
[测试测量]
ARM7与FPGA在工控和故障<font color='red'>检测</font>中的应用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved