ARM微控制器与嵌入式系统 课件 12 STM32F4xx微控制器库函数开发-点亮一个led灯_第1页
ARM微控制器与嵌入式系统 课件 12 STM32F4xx微控制器库函数开发-点亮一个led灯_第2页
ARM微控制器与嵌入式系统 课件 12 STM32F4xx微控制器库函数开发-点亮一个led灯_第3页
ARM微控制器与嵌入式系统 课件 12 STM32F4xx微控制器库函数开发-点亮一个led灯_第4页
ARM微控制器与嵌入式系统 课件 12 STM32F4xx微控制器库函数开发-点亮一个led灯_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARM微控制器与嵌入式系统

库函数开发-点亮led灯主讲人:景妮琴北京电子科技职业学院内容认识GPIO结构体打开时钟了解GPIO库函数了解开发板硬件电路编程方法完成任务GPIO结构体typedefstruct{uint32_tGPIO_Pin;GPIOMode_TypeDefGPIO_Mode;GPIOSpeed_TypeDefGPIO_Speed;GPIOOType_TypeDefGPIO_OType;GPIOPuPd_TypeDefGPIO_PuPd;}GPIO_InitTypeDef;GPIOMode结构体typedefenum{GPIO_Mode_IN=0x00,/*!<GPIOInputMode*/GPIO_Mode_OUT=0x01,/*!<GPIOOutputMode*/GPIO_Mode_AF=0x02,/*!<GPIOAlternatefunctionMode*/GPIO_Mode_AN=0x03/*!<GPIOAnalogMode*/}GPIOMode_TypeDef;GPIOOType结构体typedefenum{GPIO_OType_PP=0x00,GPIO_OType_OD=0x01}GPIOOType_TypeDef;GPIOSpeed结构体typedefenum{GPIO_Low_Speed=0x00,/*!<Lowspeed*/GPIO_Medium_Speed=0x01,/*!<Mediumspeed*/GPIO_Fast_Speed=0x02,/*!<Fastspeed*/GPIO_High_Speed=0x03/*!<Highspeed*/}GPIOSpeed_TypeDef;#defineGPIO_Speed_2MHzGPIO_Low_Speed#defineGPIO_Speed_25MHzGPIO_Medium_Speed#defineGPIO_Speed_50MHzGPIO_Fast_Speed#defineGPIO_Speed_100MHzGPIO_High_SpeedGPIOPuPd结构体typedefenum{GPIO_PuPd_NOPULL=0x00,GPIO_PuPd_UP=0x01,GPIO_PuPd_DOWN=0x02}GPIOPuPd_TypeDef;GPIO结构体typedefenum{Bit_RESET=0,Bit_SET}BitAction;GPIO结构体#defineGPIO_Pin_0((uint16_t)0x0001)/*Pin0selected*/#defineGPIO_Pin_1((uint16_t)0x0002)/*Pin1selected*/#defineGPIO_Pin_2((uint16_t)0x0004)/*Pin2selected*/#defineGPIO_Pin_3((uint16_t)0x0008)/*Pin3selected*/#defineGPIO_Pin_4((uint16_t)0x0010)/*Pin4selected*/#defineGPIO_Pin_5((uint16_t)0x0020)/*Pin5selected*/#defineGPIO_Pin_6((uint16_t)0x0040)/*Pin6selected*/#defineGPIO_Pin_7((uint16_t)0x0080)/*Pin7selected*/#defineGPIO_Pin_8……((uint16_t)0x0100)/*Pin8selected*/#defineGPIO_Pin_15((uint16_t)0x8000)/*Pin15selected*/#defineGPIO_Pin_All((uint16_t)0xFFFF)/*Allpinsselected*/STM32微控制器-添加头文件添加全局宏定义:USE_STDPERIPH_DRIVER#ifdefUSE_STDPERIPH_DRIVER#include"stm32f4xx_conf.h"#endif在stm32f4xx_conf.h中加载了这些库函数:STM32微控制器-添加头文件主要添加头文件:#include"stm32f4xx.h"#include"main.h"而stm32f4xx_gpio.h、stm32f4xx_rcc.h已经包含只需要在fwlib中添加源文件:stm32f4xx_gpio.c、stm32f4xx_rcc.c即可。注意:这里需要用到哪个源文件就加哪个,这里需要用GPIO点亮led灯,因此添加rcc和gpio即可。STM32微控制器-重要函数1个初始化函数:voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);2个读取输入电平函数:uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);uint16_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx);2个读取输出电平函数:uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);uint16_tGPIO_ReadOutputData(GPIO_TypeDef*GPIOx);STM32微控制器-重要函数4个设置输出电平函数:voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal);voidGPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal);STM32微控制器-库函数1个初始化函数:

voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);作用:初始化一个或者多个IO口(同一组)的工作模式,输出类型,速度以及上下拉方式。也就是一组IO口的4个配置寄存器。GPIOx->MODERGPIOx->OSPEEDRGPIOx->OTYPERGPIOx->PUPDRGPIO_PinSTM32微控制器-库函数GPIO_Init函数初始化样例:GPIO_InitTypeDefGPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//使能GPIOH时钟

//GPIOH12,H13初始化设置

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13;//LED1和LED2对应IO口

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//普通输出模式

GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉

GPIO_Init(GPIOH,&GPIO_InitStructure);//初始化GPIOH12,13可以一次初始化一个IO组下的多个IO,前提是这些IO口的配置方式一样。STM32微控制器-库函数

2个读取输入电平函数:uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:读取某个GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。例如:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5);//读取GPIOA5的输入电平STM32微控制器-库函数

2个读取输入电平函数:uint16_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx);作用:读取某组GPIO的输入电平。实际操作的也是GPIOx_IDR寄存器。例如:GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有I/O口输入电平STM32微控制器-库函数

2个读取输出电平函数:uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:读取某个GPIO的输出电平。实际操作的是GPIO_ODR寄存器。例如:

GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5);//读取GPIOA.5的输出电平STM32微控制器-库函数

2个读取输出电平函数:uint16_tGPIO_ReadOutputData(GPIO_TypeDef*GPIOx);作用:读取某组GPIO的输出电平。实际操作的是GPIO_ODR寄存器。例如:GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有I/O口输出电平STM32微控制器-库函数4个设置输出电平函数:voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:设置某个IO口输出为高电平(1)。实际操作BSRRL寄存器例如:GPIO_SetBits(GPIOA,GPIO_Pin_0);就是为GPIOA0设置高电平voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);作用:设置某个IO口输出为低电平(0)。实际操作的BSRRH寄存器。例如:GPIO_ResetBits(GPIOA,GPIO_Pin_0);就是为GPIOA0设置低电平STM32微控制器-库函数4个设置输出电平函数:voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal);作用:为某个IO口设置BitVal的值,BitVal可以是0也可以是1。例如:GPIO_WriteBit(GPIOA,GPIO_Pin_0,1);就是为GPIOA0设置高电平voidGPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal);作用:为某组IO口设置PortVal的值。例如:GPIO_WriteBit(GPIOA,0x0100);就是为GPIOA设置0x0100的值。硬件电路任务:点亮一盏led灯。分析:1.底板上的led灯的硬件电路图如右图,我们发现led灯D1的左端接3.3V高电平,为了点亮它,需要有电流流过,也就是需要有压差,左边高电平,右边应为低电平2.如果我们用杜邦线在D1的右边连接GPIOA0,那么A0的电平应为低电平3.下面的任务就是为GPIOA0设置低电平。库函数编程工程树在工程模板的基础上完成在hardware中新建led.c和led.h文件led.c品在hardware中led.h只需要在main中#include即可led.c要实现GPIO的配置以及初始化led.h是led.c中函数的声明库函数编程-led.c在led.c中完成了一个函数的实现led_Init()在led_Init()中,定义了结构体变量GPIO_InitStructure,打开了GPIOA的时钟,完成了结构体的配置,最后进行了初始化。库函数编程-led.h在led.h中完成了一个函数的声明#ifndef__LED_H#define__LED_Hvoidled_Init(void);#endif库函数编程-main.c在main.c中加载了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论