stm32分模块编程学习important.docx
- 文档编号:2981806
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:158
- 大小:74.39KB
stm32分模块编程学习important.docx
《stm32分模块编程学习important.docx》由会员分享,可在线阅读,更多相关《stm32分模块编程学习important.docx(158页珍藏版)》请在冰豆网上搜索。
stm32分模块编程学习important
启动函数中有各个中断处理函数名称!
!
!
startup_stm32f40_41xxx.s
system_stm32f4xx.c
系统初始化函数
SystemInit();//配置系统时钟
系统内核变量
SystemCoreClockvariable
改变系统时钟
SystemCoreClockUpdate()
配置好的是168M
Sysclock,Hclk
168000000
*AHBPrescaler|1
*-----------------------------------------------------------------------------
*APB1Prescaler|4
*-----------------------------------------------------------------------------
*APB2Prescaler|2
#ifdefined(STM32F40_41xxx)
uint32_tSystemCoreClock=168000000;//在这里设置系统的时钟
#endif/*STM32F40_41xxx*/
配置系统时钟,PLL,分频比,AHB/APBx分频比,flash设置
staticvoidSetSysClock(void)
每次hclk改变后必须调用这个来更新系统时钟
voidSystemCoreClockUpdate(void)
typedefenum
{
Bit_RESET=0,
Bit_SET
}BitAction;
枚举类型:
为数定义一个别名,这样好区分,引用的时候好引用
枚举型是预处理指令#define的替代。
一;结束
一般的定义方式如下:
enum enum_type_name
{
ENUM_CONST_1,
ENUM_CONST_2,
...
ENUM_CONST_n
}enum_variable_name;
注意:
enum_type_name是自定义的一种数据数据类型名,而enum_variable_name为enum_type_name类型的一个变量,也就是我们平时常说的枚举变量。
实际上enum_type_name类型是对一个变量取值范围的限定,而花括号内是它的取值范围,即enum_type_name类型的变量enum_variable_name只能取值为花括号内的任何一个值,如果赋给该类型变量的值不在列表中,则会报错或者警告。
ENUM_CONST_1、ENUM_CONST_2、...、ENUM_CONST_n,这些成员都是常量,也就是我们平时所说的枚举常量(常量一般用大写)
例如:
typedefenum
{
GPIO_Mode_IN=0x00,/*!
GPIO_Mode_OUT=0x01,/*! GPIO_Mode_AF=0x02,/*! GPIO_Mode_AN=0x03/*! }GPIOMode_TypeDef; 这个GPIOMode_TypeDef是个类似于int的枚举类型, 定义变量时: GPIOMode_TypeDefGPIO_MODE; 这个GPIO_MODE只能取上边的那四个值 typedefstruct { uint32_tGPIO_Pin;/*! Thisparametercanbeanyvalueof@refGPIO_pins_define*/ GPIOMode_TypeDefGPIO_Mode;/*! Thisparametercanbeavalueof@refGPIOMode_TypeDef*/ GPIOSpeed_TypeDefGPIO_Speed;/*! Thisparametercanbeavalueof@refGPIOSpeed_TypeDef*/ GPIOOType_TypeDefGPIO_OType;/*! Thisparametercanbeavalueof@refGPIOOType_TypeDef*/ GPIOPuPd_TypeDefGPIO_PuPd;/*! Thisparametercanbeavalueof@refGPIOPuPd_TypeDef*/ }GPIO_InitTypeDef; 这是个结构体,只不过这个结构体里面的额成员都是枚举类型的成员,且这个结构体也是枚举类型的,是为了方便区分和避免出错。 使用的时候还是要GPIO_InitTypeDefGPIO_InitStruct来定义一个结构体 Uint8_t Uint16_t 目前还是先使用这个厂家的库函数比较好,因为时间不允许,但是应该效率差不多,因为可能只是库函数版本不同罢了。 目录结构: 四个文件夹: 用户: MDK-ARM: 驱动库函数: CMSIS: Cmsis中的 必须的文件是: Stm32f4xx.h Ccore_cm4.h Stm32f4xx.it.c Startup_stm32f40_41xxx.s system_stm32f4xx.c 库函数驱动中必须的是: Crc.c Rcc.c Misc.c Syscfg.c 然后用到什么外设就把外设添加进来 1时钟设置: Rcc: 复位与实时钟控制 内外部时钟,PLL 系统,总线时钟配置 外设时钟配置 中断和标志位管理 一.复位和时钟控制 1内外部时钟,pll锁相环,时钟输出,时钟保护配置 ====================================================================== 外设默认都用HIS(16m)speed,开始都是关闭的除了sram和flash Io口都是输入(inputfloating)状态 Oncethedevicestartedfromreset,theuserapplicationhasto: (+)ConfiguretheclocksourcetobeusedtodrivetheSystemclock (iftheapplicationneedshigherfrequency/performance) (+)ConfiguretheSystemclockfrequencyandFlashsettings (+)ConfiguretheAHBandAPBbussesprescalers (+)Enabletheclockfortheperipheral(s)tobeused (+)Configuretheclocksource(s)forperipheralswhichclocksarenot derivedfromtheSystemclock(I2S,RTC,ADC,USBOTGFS/SDIO/RNG 系统时钟复位函数 voidRCC_DeInit(void) { } Thedefaultresetstateoftheclockconfigurationisgivenbelow: *-HSIONandusedassystemclocksource *-HSE,PLLandPLLI2SOFF *-AHB,APB1andAPB2prescalersetto1. *-CSS,MCO1andMCO2OFF *-Allinterruptsdisabled Thisfunctiondoesn'tmodifytheconfigurationofthe *-Peripheralclocks *-LSI,LSEandRTCclocks 使用外部时钟函数: voidRCC_HSEConfig(uint8_tRCC_HSE) { } @argRCC_HSE_OFF: turnOFFtheHSEoscillator,HSERDYflaggoeslowafter *6HSEoscillatorclockcycles. *@argRCC_HSE_ON: turnONtheHSEoscillator *@argRCC_HSE_Bypass: HSEoscillatorbypassedwithexternalclock 内部高频时钟校准函数(因受温度等的影响) voidRCC_AdjustHSICalibrationValue(uint8_tHSICalibrationValue) { } HSICalibrationValue: specifiesthecalibrationtrimmingvalue. *Thisparametermustbeanumberbetween0and0x1F. 使能或关闭内部高频时钟 voidRCC_HSICmd(FunctionalStateNewState) { } *@paramNewState: newstateoftheHSI. *Thisparametercanbe: ENABLEorDISABLE. 使能或关闭外部低频振荡器 voidRCC_LSEConfig(uint8_tRCC_LSE) @argRCC_LSE_OFF: turnOFFtheLSEoscillator,LSERDYflaggoeslowafter *6LSEoscillatorclockcycles. *@argRCC_LSE_ON: turnONtheLSEoscillator *@argRCC_LSE_Bypass: LSEoscillatorbypassedwithexternalclock 使能或关闭内部低频振荡器 voidRCC_LSICmd(FunctionalStateNewState) @paramNewState: newstateoftheLSI. *Thisparametercanbe: ENABLEorDISABLE. 锁
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm32 模块 编程 学习 important