STM32单片机IO端口编程.ppt





《STM32单片机IO端口编程.ppt》由会员分享,可在线阅读,更多相关《STM32单片机IO端口编程.ppt(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2章 STM32单片机IO端口编程2.1 STM322.1 STM32单片机单片机管脚和命名规则管脚和命名规则2.2 STM322.2 STM32单片机单片机时钟时钟 配置配置2.3 STM322.3 STM32单片机单片机I/OI/O端口配置端口配置2.4 STM322.4 STM32单片机单片机I/OI/O端编程步骤端编程步骤STM32单片机单片机管脚管脚STM32系列单片机系列单片机命名规则命名规则 2.1 STM322.1 STM32单片机管脚和命名规则单片机管脚和命名规则PA口 16脚PB口16脚PC口3脚PD口2脚STM32F103CBT6 共有共有37个个I/O管脚管脚:PA口
2、 16脚+PB口16脚+PC口3脚+PD口2脚。STM32单片机管脚:以单片机管脚:以STM32F103Cx为例,为例,采用的封装形式采用的封装形式LQFP48一般而言,嵌入式系统在工作前,都要进行初始化工作,其中包括调用RCC_Configuration(复位和时钟设置)函数。用于系统复位和初始化STM32系列微控制器的时钟。2.2 STM322.2 STM32单片机时钟配置单片机时钟配置2.2.1 STM322.2.1 STM32时钟系统时钟系统2.2.2 2.2.2 RCC_ConfigurationRCC_Configuration(复位和时钟设置)(复位和时钟设置)函数函数STM32
3、系列微控制器中,有5个时钟源:HSI (High Speed Internal):高速内部时钟、HSE(High Speed External):高速外部时钟、LSI(Low Speed Internal):低速内部时钟、LSE(Low Speed External):低速外部时钟、PLL(Phase Locked Loop):锁相环倍频输出。其中的HSI、HSE、或PLL可被用来驱动系统时钟。其中的LSI、LSE作为二级时钟源。STM32时钟系统结构图(P56)2.2.1 STM322.2.1 STM32时钟系统时钟系统外设总线:包括APB1(Advanced Peripheral Bus
4、1)和APB2(Advanced Peripheral Bus 2)APB2:用于高速外设APB1:用于低速外设 AMBA片上总线:已成为一种流行的工业片上总线标准。它包括AHB(Advanced High performance Bus)和APB(Advanced Peripheral Bus),前者作为系统总线,后者作为外设总线。STM32系统结构图系统结构图连接在APB1(低速外设)上的设备:有连接在APB2(高速外设)上的设备:有连接在AHB(Advanced High performance Bus)上的设备:有1 1、使能、使能 挂接在挂接在APB1APB1总线总线上的外设上的外设
5、 对应的时钟对应的时钟 命令:命令:RCC_APB1PeriphClockCmd()函数函数例如,使能例如,使能TIM2对应的时钟:对应的时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd()函数函数2 2、使能、使能 挂接在挂接在APB2APB2总线总线上的外设上的外设 对应的时钟对应的时钟 命令:命令:例如,使能例如,使能GPIO端口对应的时钟:端口对应的时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,
6、ENABLE);3 3、使能、使能 挂接在挂接在AHBAHB总线总线上的外设上的外设 对应的时钟对应的时钟 命令:命令:RCC_AHBPeriphClockCmd()函数函数例如,使能例如,使能DMA对应的时钟:对应的时钟:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA,ENABLE);使用操作符使用操作符“|”可以一次选中上表中的一个或多个取值的组合作可以一次选中上表中的一个或多个取值的组合作为该参数的值。为该参数的值。STM32F103xx增强型增强型模模块框图块框图基于ARM Cortex内核的MCU 和 普通的8/16位单片机 在系统结构上 最大区别最大
7、区别:普通的8/16位单片机:只有单片机:只有1个系统时钟频率,个系统时钟频率,而基于而基于ARMCortex内核的内核的MCU:具有多个时钟频率,分别供:具有多个时钟频率,分别供给内核给内核和和不同外设模块使用。不同外设模块使用。本课程的学习难点之一:就是本课程的学习难点之一:就是ARM时钟时钟比比单片机时钟单片机时钟复杂得多。复杂得多。为什么ARM时钟这么复杂?原因二:时钟分开有助于实现原因二:时钟分开有助于实现低功耗低功耗。原因一:原因一:高速时钟高速时钟供供中央处理器中央处理器等等高速高速设备使用,设备使用,低速时钟低速时钟供供外设外设等等低速低速设备使用。设备使用。时钟输出使能 ST
8、M32处理器因为低功耗低功耗的需要,各模块需要分别独立开启时钟。当需要使用某个外设模块时,记得一定当需要使用某个外设模块时,记得一定要先使能对应的时钟。要先使能对应的时钟。否则,这个外设不能工作。2.2.2 2.2.2 R RC CC C_Configuration_Configuration()函数函数1、RCC复位和时钟配置寄存器组2、枚举类型ErrorStatus3、RCC_Configuration():(复位和时钟设置)函数(Reset and Clock Configuration(),复位和时钟设置复位和时钟设置 函数函数)STM32STM32单片机的单片机的复位和时钟设置复位和
9、时钟设置:共包括共包括1010个设置寄存器个设置寄存器一个一个32位的位的时钟控制时钟控制寄存器寄存器(RCC_CR)一个一个32位的位的时钟配置时钟配置寄存器(寄存器(RCC_CFGR)一个一个32位的位的时钟中断时钟中断寄存器寄存器(RCC_CIR)一个一个32位的位的APB2外设外设复位复位寄存器寄存器(RCC_APB2RSTR)一个一个32位的位的APB1外设外设复位复位寄存器寄存器(RCC_APB1RSTR)一个一个32位的位的AHB外设时钟外设时钟使能使能寄存器寄存器(RCC_AHBENR)一个一个32位的位的APB2外设时钟外设时钟使能使能寄存器寄存器(RCC_APB2ENR)一
10、个一个32位的位的APB1外设时钟外设时钟使能使能寄存器寄存器(RCC_APB1ENR)一个一个32位的位的备份域控制备份域控制寄存器寄存器(RCC_BDCR)一个一个32位的位的控制控制/状态状态寄存器寄存器(RCC_CSR)Backupdomaincontrolregister(RCC_BDCR)详见详见参考手册参考手册V10_1第第P60编程时,时钟的具体配置是从RCC(Reset and Clock Configuration,复位和时钟配置)寄存器组开始。在固件库中,用结构体RCC_TypeDef 定义 RCC寄存器组:在文件“stm32f10 x_map.h”中,定义如下:/*-R
11、eal-TimeClock-*/typedefstructvu32CR;vu32CFGR;vu32CIR;vu32APB2RSTR;vu32APB1RSTR;vu32AHBENR;vu32APB2ENR;vu32APB1ENR;vu32BDCR;vu32CSR;RCC_TypeDef;1、RCC复位和时钟配置寄存器组/*Peripheralbaseaddressinthebit-bandregion*/#definePERIPH_BASE(u32)0 x40000000)/*Peripheralmemorymap*/#defineAPB1PERIPH_BASEPERIPH_BASE#defin
12、eAPB2PERIPH_BASE(PERIPH_BASE+0 x10000)#defineAHBPERIPH_BASE(PERIPH_BASE+0 x20000)#defineRCC_BASE(AHBPERIPH_BASE+0 x1000)#ifdef_RCC#defineRCC(RCC_TypeDef*)RCC_BASE)#endif/*_RCC*/该宏定义的功能:在程序中,所有写RCC的地方,编译器的预处理程序,都将它替换为:(RCC_TypeDef*)0 x40021000)2、枚举类型ErrorStatus在文件“stm32f10 x_type.h”中,包含typedef enum E
13、RROR=0,SUCCESS=!ERROR ErrorStatus;该语句,定义了新枚举类型名ErrorStatus,代表左侧定义的,代表左侧定义的枚举类型。枚举类型。3、RCC_Configuration(复位和时钟设置)函数:在“”中ErrorStatusHSEStartUpStatus;voidRCC_Configuration(void)/*将外设将外设RCC寄存器组寄存器组重新设置为默认值,即重新设置为默认值,即复位复位。RCCsystemreset*/RCC_DeInit();/*打开打开外部高速时钟晶振外部高速时钟晶振HSE,EnableHSE*/RCC_HSEConfig(RC
14、C_HSE_ON);/*等待等待HSE外部高速时钟晶振外部高速时钟晶振稳定稳定,或者在超时的情况下退出,或者在超时的情况下退出,WaittillHSEisready*/HSEStartUpStatus=RCC_WaitForHSEStartUp();if(HSEStartUpStatus=SUCCESS)/SUCCESS:HSE晶振晶振稳定就绪稳定就绪/*设置设置AHB时钟时钟=SYSCLK=48MHz,HCLK(即(即AHB时钟)时钟)=SYSCLK*/RCC_HCLKConfig(RCC_SYSCLK_Div1);/*设置高速设置高速PCLK2时钟时钟(即即APB2clock)=AHB时钟
15、时钟/2=24MHz,PCLK2=HCLK/2*/RCC_PCLK2Config(RCC_HCLK_Div2);/*设置低速设置低速PCLK1时钟时钟(即即APB1clock)=AHB时钟时钟/4=12MHz,PCLK1=HCLK/4*/RCC_PCLK1Config(RCC_HCLK_Div4);/RCC_HCLK_Div4:APB1clock=HCLK/4=12MHz,此处不同于鸥鹏公司的程序(此处不同于鸥鹏公司的程序(=36MHz)/*设置设置Flash延时时钟周期数:为延时时钟周期数:为2*/FLASH_SetLatency(FLASH_Latency_2);/*EnableFlash
16、 PrefetchBuffer预取指令指令缓冲区,这预取指令指令缓冲区,这2句与句与RCC没有关系没有关系*/FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/*利用锁相环将利用锁相环将HSE外部外部8MHz晶振晶振6倍频到倍频到48MHz。PLLCLK=8MHz*6=48MHz*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_6);/此处不同于鸥鹏此处不同于鸥鹏公司的程序公司的程序:PLLCLK=8MHz*6=48MHz/*EnablePLL*/RCC_PLLCmd(ENABLE);/
17、*WaittillPLLisready,等待,等待锁相环锁相环输出输出稳定稳定*/while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)=RESET)/*SelectPLLassystemclocksource*/RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/选择选择PLLCLK作为作为SYSCLK,所以所以SYSCLK为为48MHz/*WaittillPLLisusedassystemclocksource*/while(RCC_GetSYSCLKSource()!=0 x08)/*Enableperipheralclocks
18、-*/*GPIOA,GPIOBandSPI1clockenable*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_SPI1,ENABLE);/*EnableGPIOC,GPIODclock*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);枚举类型变量/*设置低速设置低速PCLK1时钟时钟(即即APB1clock)=AHB时钟时钟/4=12MHz,PCLK1=HCLK/4*/RCC_
19、PCLK1Config(RCC_HCLK_Div4);/RCC_HCLK_Div4:APB1clock=HCLK/4=12MHz,此处不同于鸥鹏公司的程序此处不同于鸥鹏公司的程序(=36MHz)/*设置设置Flash延时时钟周期数:为延时时钟周期数:为2*/FLASH_SetLatency(FLASH_Latency_2);/*EnableFlash PrefetchBuffer预取指令指令缓冲区,预取指令指令缓冲区,这这2句与句与RCC没有关系没有关系*/FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/*利用锁相环将利用锁相环将HS
20、E外部外部8MHz晶振晶振6倍频到倍频到48MHz,作为,作为PLLCLK。PLLCLK=8MHz*6=48MHz*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_6);/此处不同于鸥鹏公司的程序此处不同于鸥鹏公司的程序:PLLCLK=8MHz*6=48MHz/*EnablePLL*/RCC_PLLCmd(ENABLE);/*WaittillPLLisready,等待,等待锁相环锁相环输出输出稳定稳定*/while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)=RESET)/*SelectPLLassystemclock
21、source*/选择选择PLLCLK作为作为SYSCLK,所以所以SYSCLK为为48MHzRCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/*WaittillPLLisusedassystemclocksource*/while(RCC_GetSYSCLKSource()!=0 x08)/*Enableperipheralclocks-*/*GPIOA,GPIOBandSPI1clockenable*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Perip
22、h_SPI1,ENABLE);/*EnableGPIOC,GPIODclock*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);以上所见的固件库函数:以上所见的固件库函数:详见详见“中文版:中文版:STM32F10 xxx_固件库函数固件库函数P193”固件库函数的具体实现:见文件固件库函数的具体实现:见文件“stm32f10 x_rcc.h”其中RCC_DeInit();/*FunctionName:RCC_DeInit*Description:ResetstheRCCclockconfigu
23、rationtothedefaultresetstate.*Input:None*Output:None*Return:None*/voidRCC_DeInit(void)/*SetHSIONbit*/RCC-CR|=(u32)0 x00000001;/*ResetSW1:0,HPRE3:0,PPRE12:0,PPRE22:0,ADCPRE1:0andMCO2:0bits*/RCC-CFGR&=(u32)0 xF8FF0000;/*ResetHSEON,CSSONandPLLONbits*/RCC-CR&=(u32)0 xFEF6FFFF;/*ResetHSEBYPbit*/RCC-CR&=(
24、u32)0 xFFFBFFFF;/*ResetPLLSRC,PLLXTPRE,PLLMUL3:0andUSBPREbits*/RCC-CFGR&=(u32)0 xFF80FFFF;/*Disableallinterrupts*/RCC-CIR=0 x00000000;2.3 STM322.3 STM32单片机单片机I/OI/O端口配置端口配置.1.1 STM32单片机的单片机的I/OI/O端口端口和管脚和管脚.2.2 STM32单片机的单片机的I/OI/O端口配置端口配置.1.1 STM32单片机的单片机的I/OI/O端口端口和管脚和管脚STM32单片机单片机最多有最多有7个个16位位的并行的
25、并行I/OI/O端口端口:PA、PB、PC、PD、PE、PF、PG。STM32F103Cx单片机单片机只有只有4个个16位位的并行的并行I/OI/O端口端口:PA、PB、PC、PD。PA口 16脚PB口16脚PC口3脚PD口2脚STM32F103CBT6 包含包含4个端口:PA口、PB口、PC口、PD口,共共有有37个个I/O管脚管脚:PA口 16脚+PB口16脚+PC口3脚+PD口2脚。STM32单片机的单片机的I/OI/O端口端口和管脚:和管脚:以以STM32F103Cx为例为例每个每个GPIOx端口端口:共有共有7 7个设置寄存器个设置寄存器两个两个32位的配置寄存器位的配置寄存器(GP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 单片机 IO 端口 编程

限制150内