4-STM32单片机IO端口编程参考幻灯片课件.ppt
《4-STM32单片机IO端口编程参考幻灯片课件.ppt》由会员分享,可在线阅读,更多相关《4-STM32单片机IO端口编程参考幻灯片课件.ppt(69页珍藏版)》请在三一办公上搜索。
1、第,2,章,STM32,单片机,IO,端口编程,2.1 STM32,单片机,管脚和命名规则,2.2 STM32,单片机,时钟,配置,2.3 STM32,单片机,I/O,端口配置,2.4 STM32,单片机,I/O,端编程步骤,1,?,STM32,单片机,管脚,?,STM32,系列单片机,命名规则,2.1 STM32,单片机管脚和命名规则,2,PA,口,16,脚,PB,口,16,脚,PC,口,3,脚,PD,口,2,脚,STM32F103CBT6,共有,37,个,I/O,管脚,:,PA,口,16,脚,+,PB,口,16,脚,+,PC,口,3,脚,+,PD,口,2,脚。,?,STM32,单片机管脚:
2、以,STM32F103Cx,为例,,采用的封装形式,LQFP48,3,一般而言,嵌入式系统在工作前,都要进行初始化工作,其中包括,调用,RCC_Configuration,(复位和时钟设置)函数。用于,系统复位,和,初始化,STM32,系列微控制器的,时钟,。,2.2 STM32,单片机时钟配置,2.2.1 STM32,时钟系统,2.2.2,RCC_Configuration,(复位和时钟设置),函数,4,STM32,系列微控制器中,有,5,个时钟源,:,HSI,(,High Speed Internal,),:高速内部时钟、,HSE,(,High Speed External,):高速外部时
3、钟、,LSI,(,Low Speed Internal,),:低速内部时钟、,LSE,(,Low Speed External,),:低速外部时钟、,PLL,(,Phase Locked Loop,),:锁相环倍频输出。,其中的,HSI,、,HSE,、,或,PLL,可被用来驱动,系统时钟,。,其中的,LSI,、,LSE,作为二级时钟源。,STM32,时钟系统结构图,(P56),2.2.1 STM32,时钟系统,5,?,外设总线:包括,APB1(Advanced Peripheral Bus 1),和,APB2(Advanced Peripheral Bus 2),APB2,:用于高速外设,AP
4、B1,:用于低速外设,?,AMBA,片上总线:已成为一种流行的工业片上总线标准。,它包括,AHB(Advanced High performance Bus),和,APB(Advanced Peripheral Bus),,前者作为系统总线,,后者作为外设总线。,7,STM32,系统结构图,连接在,APB1(,低速外设,),上的设备:有,连接在,APB2(,高速外设,),上的设备:有,连接在,AHB(Advanced High performance Bus),上的设备:有,8,1,、使能,挂接在,APB1,总线,上的外设,对应的时钟,命令:,RCC_,APB1,PeriphClockCmd(
5、),函数,例如,使能,TIM2,对应的时钟:,RCC_,APB1,PeriphClockCmd(RCC_,APB1,Periph_,TIM2,,,ENABLE);,RCC_,APB2,PeriphClockCmd(),函数,2,、使能,挂接在,APB2,总线,上的外设,对应的时钟,命令:,例如,使能,GPIO,端口对应的时钟:,RCC_,APB2,PeriphClockCmd(RCC_,APB2,Periph_,GPIOB,|,RCC_APB2Periph_GPIOE,,,ENABLE);,9,3,、使能,挂接在,AHB,总线,上的外设,对应的时钟,命令:,RCC_,AHB,PeriphClo
6、ckCmd(),函数,例如,使能,DMA,对应的时钟:,RCC_,AHB,PeriphClockCmd(RCC_,AHB,Periph_,DMA,,,ENABLE);,10,使用操作符“,|,”,可以一次选中上表中的一个或多个取值的组合作为,该参数的值。,11,STM32F103,xx,增强型,模,块框图,13,基于,ARM Cortex,内核的,MCU,和,普通的,8/16,位单片机,在系统结构上,最大区别,:,普通的,8/16,位,单片机:只有,1,个系统时钟频率,,而基于,ARM Cortex,内核的,MCU,:具有多个时钟频率,分别供,给内核,和,不同外设模块使用。,本课程的学习难点之
7、一:就是,ARM,时钟,比,单片机时钟,复杂得多。,为什么,ARM,时钟这么复杂?,14,原因二:时钟分开有助于实现,低功耗,。,原因一:,高速时钟,供,中央处理器,等,高速,设备使用,,低速时钟,供,外设,等,低速,设备使用。,15,时钟输出使能,STM32,处理器因为,低功耗,的需要,各模块,需要分别独立开启时钟。,当需要使用某个外设模块时,记得一定要,先使能对应的时钟。,否则,这个外设不能,工作。,16,2.2.2,R,C,C,_Configuration,(,),函数,1,、,RCC,复位和时钟配置,寄存器组,2,、,枚举类型,ErrorStatus,3,、,RCC_Configura
8、tion,(),:,(复位和时钟设置),函数,(,R,eset and,C,lock,C,onfiguration(),,,复位和时钟设置,函数,),17,STM32,单片机的复位和时钟设置,:,共包括,10,个设置寄存器,一个,32,位的,时钟控制,寄存器,(RCC_,C,R),一个,32,位的,时钟配置,寄存器(,RCC_,CFG,R),一个,32,位的,时钟中断,寄存器,(RCC_,CI,R),一个,32,位的,APB2,外设,复位,寄存器,(RCC_APB2,RST,R),一个,32,位的,APB1,外设,复位,寄存器,(RCC_APB1,RST,R),一个,32,位的,AHB,外设时
9、钟,使能,寄存器,(RCC_AHB,EN,R),一个,32,位的,APB2,外设时钟,使能,寄存器,(RCC_APB2,EN,R),一个,32,位的,APB1,外设时钟,使能,寄存器,(RCC_APB1,EN,R),一个,32,位的,备份域控制,寄存器,(RCC_,BDC,R),一个,32,位的,控制,/,状态,寄存器,(RCC_,CS,R),Backup domain control register(RCC_BDCR),详见,参考手册,V10_1,第,P60,18,编程时,时钟的具体配置是从,RCC,(,Reset and Clock,Configuration,,,复位和时钟配置,),寄
10、存器组,开始。在固件库中,用结构体,RCC_TypeDef,定义,RCC,寄存器组,:,在文件“,stm32f10 x_map.h”,中,定义如下:,/*-,Real-Time Clock-*/,typedef struct,vu32 CR;,vu32 CFGR;,vu32 CIR;,vu32 APB2RSTR;,vu32 APB1RSTR;,vu32 AHBENR;,vu32 APB2ENR;,vu32 APB1ENR;,vu32 BDCR;,vu32 CSR;,RCC_TypeDef,;,1,、,RCC,复位和时钟配置,寄存器组,19,/*Peripheral base address i
11、n the bit-band region*/,#define,PERIPH,_BASE(u32)0 x40000000),/*Peripheral memory map*/,#define APB1PERIPH_BASE PERIPH_BASE,#define APB2PERIPH_BASE(PERIPH_BASE+0 x1 0000),#define,AHB,PERIPH_BASE(PERIPH_BASE+0 x2 0000),#define RCC_BASE(AHBPERIPH_BASE+0 x1000),#ifdef _RCC,#define,RCC,(,RCC_TypeDef,*)R
12、CC_BASE),#endif/*_RCC*/,?,该宏定义的功能:在程序中,所有写,RCC,的地方,编译器的,预处理程序,都将它替换为:,(,RCC_TypeDef,*)0 x40021000),20,2,、枚举类型,ErrorStatus,在文件“,stm32f10 x_type.h”,中,包含,typedef enum ERROR=0,SUCCESS=!ERROR,ErrorStatus;,该语句,定义了新枚举类型名,ErrorStatus,,代表左侧定义的,枚举类型。,?,21,3,、,RCC_Configuration,(复位和时钟设置),函数:在“,HelloRobot.h”,中,
13、ErrorStatus HSEStartUpStatus;,void,RCC_Configuration,(void),/*,将外设,RCC,寄存器组,重新设置为默认值,即,复位,。,RCC system reset*/,RCC_DeInit();,/*,打开,外部高速时钟晶振,HSE,,,Enable HSE*/,RCC_HSEConfig(RCC_HSE_,ON,);,/*,等待,HSE,外部高速时钟晶振,稳定,,或者在超时的情况下退出,,,Wait till HSE is ready,*/,HSEStartUpStatus,=RCC_WaitForHSEStartUp();,if(HSE
14、StartUpStatus=SUCCESS)/SUCCESS,:,HSE,晶振,稳定就绪,/*,设置,AHB,时钟,=SYSCLK=,48 MHz,,,HCLK,(即,AHB,时钟),=SYSCLK*/,RCC_HCLKConfig(RCC_SYSCLK_Div1);,/*,设置高速,PCLK2,时钟,(,即,APB2 clock),=,=,AHB,时钟,/2=24 MHz,,,PCLK2=HCLK,/2,*/,RCC_PCLK2Config(RCC_HCLK_Div2);,枚举类型,变量,22,/*,设置低速,PCLK1,时钟,(,即,APB1 clock),=,AHB,时钟,/4=12,M
15、Hz,,,PCLK1=HCLK/4*/,RCC_PCLK1Config(RCC_HCLK_Div4);,/RCC_HCLK_Div4:APB1 clock=HCLK/4=12MHz,此处不同于鸥鹏公司的程序,(,=36MHz,),/*,设置,Flash,延时时钟周期数:为,2*/,FLASH_SetLatency(FLASH_Latency_2);,/*Enable Flash,Prefetch Buffer,预取指令指令缓冲区,,这,2,句与,RCC,没有关系,*/,FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);,/*,利用锁相环将
16、,HSE,外部,8MHz,晶振,6,倍频到,48 MHz,,作为,PLLCLK,。,PLLCLK=,8MHz,*6=,48 MHz,*/,RCC_PLLConfig(RCC_PLLSource_,HSE,_Div1,RCC_PLLMul_6);,/,此处不同于鸥鹏公司的程序,:,PLLCLK,=8MHz*6=,48 MHz,/*Enable PLL*/,RCC_PLLCmd(ENABLE);,23,/*Wait till PLL is,ready,,等待,锁相环,输出,稳定,*/,while(RCC_GetFlagStatus(RCC_FLAG_PLL,RDY,)=RESET),/*Selec
17、t PLL as system clock source*/,/,选择,PLLCLK,作为,SYSCLK,所以,SYSCLK,为,48 MHz,RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);,/*Wait till PLL is used as system clock source*/,while(RCC_GetSYSCLKSource()!=0 x08),/*Enable peripheral clocks-*/,/*,GPIOA,GPIOB,and SPI1,clock enable,*/,RCC_APB2Periph,Clock,Cmd(RCC_A
18、PB2Periph_GPIOA|,RCC_APB2Periph_GPIOB|RCC_APB2Periph_SPI1,ENABLE);,/*,Enable GPIOC,GPIOD clock,*/,RCC_APB2Periph,Clock,Cmd(RCC_APB2Periph_GPIOC|,RCC_APB2Periph_GPIOD,ENABLE);,24,以上所见的固件库函数:,详见“,中文版:,STM32F10 xxx_,固件库函数,V2.pdf,P193”,固件库函数的具体实现:见文件“,stm32f10 x_rcc.h”,25,其中,RCC_DeInit();,/*,*Function N
19、ame:RCC_DeInit,*Description:,Resets the RCC clock configuration to the default reset state.,*Input:None,*Output:None,*Return:None,*/,void,RCC_DeInit(void),/*Set HSION bit*/,RCC,-CR|=(u32)0 x00000001;,/*Reset SW1:0,HPRE3:0,PPRE12:0,PPRE22:0,ADCPRE1:0 and MCO2:0,bits*/,RCC,-CFGR,26,27,2.3 STM32,单片机,I/
20、O,端口配置,2.3.1,STM32,单片机的,I/O,端口和管脚,2.3.2,STM32,单片机的,I/O,端口配置,28,2.3.1,STM32,单片机的,I/O,端口和管脚,STM32,单片机,最多有,7,个,16,位,的并行,I/O,端口:,PA,、,PB,、,PC,、,PD,、,PE,、,PF,、,PG,。,STM32F103Cx,单片机,只有,4,个,16,位,的并行,I/O,端口:,PA,、,PB,、,PC,、,PD,。,29,PA,口,16,脚,PB,口,16,脚,PC,口,3,脚,PD,口,2,脚,STM32F103CBT6,包含,4,个端口:,PA,口,、,PB,口、,PC
21、,口、,PD,口,,共,有,37,个,I/O,管脚,:,PA,口,16,脚,+,PB,口,16,脚,+,PC,口,3,脚,+,PD,口,2,脚。,?,STM32,单片机的,I/O,端口和管脚:,以,STM32F103Cx,为例,30,每个,GPIOx,端口,:,共有,7,个设置寄存器,两个,32,位的配置寄存器,(GPIOx_CRL,,,GPIOx_CRH),(GPIOx_CRL)(x=A.G):GPIOx configuration register low,GPIOx,端口低配置寄存器,用于配置,GPIOx,端口的第,0,位第,7,位。,两个,32,位的数据寄存器(,GPIOx_IDR,,
22、,GPIOx_ODR),(GPIOx_IDR)(x=A.G),:,GPIOx input data register,一个,32,位的置位,/,复位寄存器,(GPIOx_BSRR),(GPIOx_BSRR)(x=A.G):,GPIOx bit set/reset register,一个,16,位的复位寄存器,(GPIOx_BRR),一个,32,位的锁定寄存器,(GPIOx_LCKR),(GPIOx_LCKR)(x=A.G):GPIOx configuration lock register,31,在,MCS-51,单片机中,每个,IO,端口,:,只有,1,个设置寄存器,P0,端口:,P0,端口
23、寄存器,-P0,P1,端口:,P1,端口寄存器,-P1,P2,端口:,P2,端口寄存器,-P2,P3,端口:,P3,端口寄存器,-P3,。,对应,STM32,单片机的数据寄存器,两个,32,位的数据寄存器(,GPIOx_IDR,,,GPIOx_ODR),(GPIOx_IDR)(x=A.G),:,GPIOx input data register,MCS-51,单片机,I0,端口的输入、输出数据寄存器,共用,1,个寄,存器,Px,,而,STM32,单片机的输入、输出数据寄存器是,分开,的。,32,MCS-51,单片机的特殊功能寄存器,33,在,固件函数库,的,“,stm32f10 x_map.h
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 单片机 IO 端口 编程 参考 幻灯片 课件
链接地址:https://www.31ppt.com/p-3847156.html