STM32F4官方评估板 笔记.docx
《STM32F4官方评估板 笔记.docx》由会员分享,可在线阅读,更多相关《STM32F4官方评估板 笔记.docx(26页珍藏版)》请在冰豆网上搜索。
STM32F4官方评估板笔记
STM32F407VGT6ST官方评估板无责任笔记①②③④⑤⑥⑦⑧⑨⑩
WritenBy钟礼浩
华南农业大学工程学院QQ371724290
1.系统初始化
①voidSystemInit(void);
子函数:
staticvoidSetSysClock(void)
关键值:
/*PLL_VCO=(HSE_VALUEorHSI_VALUE/PLL_M)*PLL_N*/
#definePLL_M8//直接修改为晶振值即得到168MHz系统时钟
#definePLL_N336
/*SYSCLK=PLL_VCO/PLL_P*/
#definePLL_P2
/*USBOTGFS,SDIOandRNGClock=PLL_VCO/PLLQ*/
#definePLL_Q7
*SupportedSTM32F4xxdevicerevision|RevA
*SystemClocksource|PLL(HSE)
*SYSCLK(Hz)|168000000
*HCLK(Hz)|168000000
*AHBPrescaler|1
*APB1Prescaler|4
*APB2Prescaler|2
*HSEFrequency(Hz)|25000000
*PLL_M|25
*PLL_N|336
*PLL_P|2
*PLL_Q|7
*PLLI2S_N|NA
*PLLI2S_R|NA
*I2Sinputclock|NA
*VDD(V)|3.3
*Mainregulatoroutputvoltage|Scale1mode
*FlashLatency(WS)|5
*PrefetchBuffer|OFF
*Instructioncache|ON
*Datacache|ON
*Require48MHzforUSBOTGFS,|Enabled
*SDIOandRNGclock|
2.通用io结构体设置
①typedefstruct
{
uint32_tGPIO_Pin;//针脚
Thisparametercanbeanyvalueof@refGPIO_pins_define*/
GPIOMode_TypeDefGPIO_Mode;//模式
Thisparametercanbeavalueof@refGPIOMode_TypeDef*/
GPIOSpeed_TypeDefGPIO_Speed;//速度
Thisparametercanbeavalueof@refGPIOSpeed_TypeDef*/
GPIOOType_TypeDefGPIO_OType;//输出物理模式推挽or开漏
Thisparametercanbeavalueof@refGPIOOType_TypeDef*/
GPIOPuPd_TypeDefGPIO_PuPd;//上下拉电阻设置
Thisparametercanbeavalueof@refGPIOPuPd_TypeDef*/
}GPIO_InitTypeDef;
Pin选择:
#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_9((uint16_t)0x0200)/*Pin9selected*/
#defineGPIO_Pin_10((uint16_t)0x0400)/*Pin10selected*/
#defineGPIO_Pin_11((uint16_t)0x0800)/*Pin11selected*/
#defineGPIO_Pin_12((uint16_t)0x1000)/*Pin12selected*/
#defineGPIO_Pin_13((uint16_t)0x2000)/*Pin13selected*/
#defineGPIO_Pin_14((uint16_t)0x4000)/*Pin14selected*/
#defineGPIO_Pin_15((uint16_t)0x8000)/*Pin15selected*/
#defineGPIO_Pin_All((uint16_t)0xFFFF)/*Allpinsselected*/
Mode选择:
typedefenum
{
GPIO_Mode_IN=0x00,/*!
GPIO_Mode_OUT=0x01,/*!
GPIO_Mode_AF=0x02,/*!
GPIO_Mode_AN=0x03/*!
}GPIOMode_TypeDef;
Speed速度设置:
typedefenum
{
GPIO_Speed_2MHz=0x00,/*!
GPIO_Speed_25MHz=0x01,/*!
GPIO_Speed_50MHz=0x02,/*!
GPIO_Speed_100MHz=0x03/*!
}GPIOSpeed_TypeDef;
OType输出物理性质设置:
typedefenum
{
GPIO_OType_PP=0x00,
GPIO_OType_OD=0x01
}GPIOOType_TypeDef;
PuPd上下拉电阻设置:
typedefenum
{
GPIO_PuPd_NOPULL=0x00,
GPIO_PuPd_UP=0x01,
GPIO_PuPd_DOWN=0x02
}GPIOPuPd_TypeDef;
②开相关寄存器时钟:
(注意开syscfg在APB2)
voidRCC_AHB1PeriphClockCmd(uint32_tRCC_AHB1Periph,FunctionalStateNewState)
voidRCC_AHB2PeriphClockCmd(uint32_tRCC_AHB2Periph,FunctionalStateNewState)
voidRCC_AHB3PeriphClockCmd(uint32_tRCC_AHB3Periph,FunctionalStateNewState)
voidRCC_APB1PeriphClockCmd(uint32_tRCC_APB1Periph,FunctionalStateNewState)
voidRCC_APB2PeriphClockCmd(uint32_tRCC_APB2Periph,FunctionalStateNewState)
AHB1首位形参:
RCC_AHB1Periph_GPIOA:
GPIOAclock
RCC_AHB1Periph_GPIOB:
GPIOBclock
RCC_AHB1Periph_GPIOC:
GPIOCclock
RCC_AHB1Periph_GPIOD:
GPIODclock
RCC_AHB1Periph_GPIOE:
GPIOEclock
RCC_AHB1Periph_GPIOF:
GPIOFclock
RCC_AHB1Periph_GPIOG:
GPIOGclock
RCC_AHB1Periph_GPIOG:
GPIOGclock
RCC_AHB1Periph_GPIOI:
GPIOIclock
RCC_AHB1Periph_CRC:
CRCclock
RCC_AHB1Periph_BKPSRAM:
BKPSRAMinterfaceclock
RCC_AHB1Periph_CCMDATARAMEN:
CCMdataRAMinterfaceclock
RCC_AHB1Periph_DMA1:
DMA1clock
RCC_AHB1Periph_DMA2:
DMA2clock
RCC_AHB1Periph_ETH_MAC:
EthernetMACclock
RCC_AHB1Periph_ETH_MAC_Tx:
EthernetTransmissionclock
RCC_AHB1Periph_ETH_MAC_Rx:
EthernetReceptionclock
RCC_AHB1Periph_ETH_MAC_PTP:
EthernetPTPclock
RCC_AHB1Periph_OTG_HS:
USBOTGHSclock
RCC_AHB1Periph_OTG_HS_ULPI:
USBOTGHSULPIclock
AHB2首位形参:
RCC_AHB2Periph_DCMI:
DCMIclock
RCC_AHB2Periph_CRYP:
CRYPclock
RCC_AHB2Periph_HASH:
HASHclock
RCC_AHB2Periph_RNG:
RNGclock
RCC_AHB2Periph_OTG_FS:
USBOTGFSclock
AHB3首位形参:
RCC_AHBPeriph:
specifiestheAHB3peripheraltogatesitsclock.
Thisparametermustbe:
RCC_AHB3Periph_FSMC
APB1首位形参:
RCC_APB1Periph_TIM2:
TIM2clock
RCC_APB1Periph_TIM3:
TIM3clock
RCC_APB1Periph_TIM4:
TIM4clock
RCC_APB1Periph_TIM5:
TIM5clock
RCC_APB1Periph_TIM6:
TIM6clock
RCC_APB1Periph_TIM7:
TIM7clock
RCC_APB1Periph_TIM12:
TIM12clock
RCC_APB1Periph_TIM13:
TIM13clock
RCC_APB1Periph_TIM14:
TIM14clock
RCC_APB1Periph_WWDG:
WWDGclock
RCC_APB1Periph_SPI2:
SPI2clock
RCC_APB1Periph_SPI3:
SPI3clock
RCC_APB1Periph_USART2:
USART2clock
RCC_APB1Periph_USART3:
USART3clock
RCC_APB1Periph_UART4:
UART4clock
RCC_APB1Periph_UART5:
UART5clock
RCC_APB1Periph_I2C1:
I2C1clock
RCC_APB1Periph_I2C2:
I2C2clock
RCC_APB1Periph_I2C3:
I2C3clock
RCC_APB1Periph_CAN1:
CAN1clock
RCC_APB1Periph_CAN2:
CAN2clock
RCC_APB1Periph_PWR:
PWRclock
RCC_APB1Periph_DAC:
DACclock
APB2首位形参:
RCC_APB2Periph_TIM1:
TIM1clock
RCC_APB2Periph_TIM8:
TIM8clock
RCC_APB2Periph_USART1:
USART1clock
RCC_APB2Periph_USART6:
USART6clock
RCC_APB2Periph_ADC1:
ADC1clock
RCC_APB2Periph_ADC2:
ADC2clock
RCC_APB2Periph_ADC3:
ADC3clock
RCC_APB2Periph_SDIO:
SDIOclock
RCC_APB2Periph_SPI1:
SPI1clock
RCC_APB2Periph_SYSCFG:
SYSCFGclock
RCC_APB2Periph_TIM9:
TIM9clock
RCC_APB2Periph_TIM10:
TIM10clock
RCC_APB2Periph_TIM11:
TIM11clock
③GPIO_Init(GPIOx,&GPIO_InitStructure);//与①共同协作,port与结构体为形参
3.开外部中断
①GPIO_InitTypeDef;
EXTI_InitTypeDef;
NVIC_InitTypeDef;//定义结构体
②开时钟(前述)位时钟,syscfg
③voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)//GPIO设置
④voidSYSCFG_EXTILineConfig(uint8_tEXTI_PortSourceGPIOx,uint8_tEXTI_PinSourcex)//中断注册(port和位)
⑤typedefstruct
{
uint32_tEXTI_Line;/*!
Thisparametercanbeanycombinationvalueof@refEXTI_Lines*/
EXTIMode_TypeDefEXTI_Mode;/*!
Thisparametercanbeavalueof@refEXTIMode_TypeDef*/
EXTITrigger_TypeDefEXTI_Trigger;/*!
Thisparametercanbeavalueof@refEXTITrigger_TypeDef*/
FunctionalStateEXTI_LineCmd;/*!
ThisparametercanbeseteithertoENABLEorDISABLE*/
}EXTI_InitTypeDef;
EXTI_Line:
#defineEXTI_Line0
#defineEXTI_Line1
#defineEXTI_Line2
#defineEXTI_Line3
#defineEXTI_Line4
#defineEXTI_Line5
#defineEXTI_Line6
#defineEXTI_Line7
#defineEXTI_Line8
#defineEXTI_Line9
#defineEXTI_Line10
#defineEXTI_Line11
#defineEXTI_Line12
#defineEXTI_Line13
#defineEXTI_Line14
#defineEXTI_Line15
#defineEXTI_Line16PVDOutput
#defineEXTI_Line17RTCAlarmevent
#defineEXTI_Line18USBOTGFSWakeupfromsuspendevent
#defineEXTI_Line19EthernetWakeupevent
#defineEXTI_Line20USBOTGHS(configuredinFS)Wakeupevent
#defineEXTI_Line21RTCTamperandTimeStampevents
#defineEXTI_Line22RTCWakeupevent
EXTI_Mode:
typedefenum
{
EXTI_Mode_Interrupt=0x00,√
EXTI_Mode_Event=0x04
}EXTIMode_TypeDef;
EXTI_Trigger:
typedefenum
{
EXTI_Trigger_Rising=0x08,√
EXTI_Trigger_Falling=0x0C,
EXTI_Trigger_Rising_Falling=0x10
}EXTITrigger_TypeDef;
EXTI_LineCmd:
ENABLE
DISABLE
⑥voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct)//初始化
⑦typedefstruct
{
uint8_tNVIC_IRQChannel;
uint8_tNVIC_IRQChannelPreemptionPriority;//0x00-0x0f取值
uint8_tNVIC_IRQChannelSubPriority;//0x00-0x0f取值
FunctionalStateNVIC_IRQChannelCmd;//ENABLE,DISABLE
}NVIC_InitTypeDef;
NVIC_IRQChannel:
typedefenumIRQn
{
/******Cortex-M4ProcessorExceptionsNumbers****************************************************************/
NonMaskableInt_IRQn=-14,/*!
<2NonMaskableInterrupt*/
MemoryManagement_IRQn=-12,/*!
<4Cortex-M4MemoryManagementInterrupt*/
BusFault_IRQn=-11,/*!
<5Cortex-M4BusFaultInterrupt*/
UsageFault_IRQn=-10,/*!
<6Cortex-M4UsageFaultInterrupt*/
SVCall_IRQn=-5,/*!
<11Cortex-M4SVCallInterrupt*/
DebugMonitor_IRQn=-4,/*!
<12Cortex-M4DebugMonitorInterrupt*/
PendSV_IRQn=-2,/*!
<14Cortex-M4PendSVInterrupt*/
SysTick_IRQn=-1,/*!
<15Cortex-M4SystemTickInterrupt*/
/******STM32specificInterruptNumbers**********************************************************************/
WWDG_IRQn=0,/*!
PVD_IRQn=1,/*!
TAMP_STAMP_IRQn=2,/*!
RTC_WKUP_IRQn=3,/*!
FLASH_IRQn=4,/*!