stm32各模块函数写法模版(基于V3.5固件库)

  • 格式:docx
  • 大小:45.36 KB
  • 文档页数:38

STM32学习笔记GPIO口GPIO初始化void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;//声明结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//打开功能时钟(再写这句程序的时候,必须进行时钟系统初始化的操作)。

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;//指明操作对象引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置IO口时钟为50MHz/10MHz/2MHzGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置推挽输出/*GPIO_Mode_AIN 模拟输入GPIO_Mode_IN_FLOATING 浮空输入(一般为中断所使用)。

GPIO_Mode_IPD 下拉输入GPIO_Mode_IPU 上拉输入GPIO_Mode_Out_OD 开漏输出GPIO_Mode_Out_PP 推挽输出GPIO_Mode_AF_OD 复用开漏输出GPIO_Mode_AF_PP 复用推挽输出*/ (一般用在点灯)。

GPIO_Init(GPIOA, &GPIO_InitStructure); //执行初始化IO口}GPIO常用函数GPIO_SetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//置高IO口GPIO_ResetBits(GPIOA,GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//置低IO口GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_4)));//翻转IO口GPIOA->ODR = 0X0010 ;//IO口直接赋值语句GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)(读取该口的电压值,相当于AVR的pin)。

若IO口为高电平,则这个函数返回为1,为低电平时返回为0.SysTick系统时钟SysTick配置函数if (SysTick_Config(SystemCoreClock / 3000))//配置时钟的频率,改变数字可改变频率,数字越大频率越快{/* Capture error */while (1);}EXTI中断外部中断外部中断IO口设置void GPIO_EXTI_Configuration(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);//使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//使能复用IO时钟GPIO_InitTypeDef GPIO_InitStructure;//声明IO口初始化结构体GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//指定PD.06为操作对象GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//设置模式为浮空输入GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化IO口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14; //指定PD.13,14为操作对象GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设置模式为浮空输入GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化IO口GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6); //将PC.06映射到外部中断GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13); //将PD.13映射到外部中断GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource14); //将PD.14映射到外部中断}外部中断初始化void EXTI_Configuration(void){EXTI_InitTypeDef EXTI_InitStructure;//声明外部中断初始化结构体EXTI_InitStructure.EXTI_Line = EXTI_Line6|EXTI_Line13|EXTI_Line14;//使能外部中断线路6,13,14EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//设置EXTI线路模式为中断EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//设置触发方式为上升沿EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能中断线路EXTI_Init(&EXTI_InitStructure);//初始化结构体}外部中断向量&优先级设定void NVIC_EXTI_Configuration(void){NVIC_InitTypeDef NVIC_InitStructure;//声明中断向量&优先级设定结构体NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//选择中断向量组别为2组NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//指定外部中断向量NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//设置该中断的先占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//设置该中断的从优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能该外部中断NVIC_Init(&NVIC_InitStructure);//初始化外部中断NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;// 指定外部中断向量NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//设置该中断的先占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //设置该中断的从优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能该外部中断NVIC_Init(&NVIC_InitStructure); //初始化外部中断}由抢先优先级和从优先级实现了中断嵌套,进而使程序即使处理更加要紧的事情。

且高的抢先优先级可以打断低的抢先优先级,当抢先优先级相同时,那就比较从优先级,先响应高的。

当二者都相同时,先响应物理地址低的中断。

外部中断函数/*example1*/void EXTI9_5_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line6) != RESET)//如果对应的中断线路触发事件,注意可以一个中断向量对应多个中断引脚{/*add code */EXTI_ClearITPendingBit(EXTI_Line6);//清中断标志}}/*example2*/void EXTI15_10_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line13) != RESET)//如果对应的中断线路13触发事件,注意可以一个中断向量对应多个中断引脚{/* add code */EXTI_ClearITPendingBit(EXTI_Line13);//清中断标志位}if(EXTI_GetITStatus(EXTI_Line14) != RESET)//如果对应的中断线路14触发事件,注意可以一个中断向量对应多个中断引脚{/* add code */EXTI_ClearITPendingBit(EXTI_Line14); //清中断标志位}}中断channel表WWDG_IRQChannel 窗口看门狗中断0x00 PVD_IRQChannel PVD 通过EXTI 探测中断TAMPER_IRQChannel 篡改中断RTC_IRQChannel RTC 全局中断FlashItf_IRQChannel FLASH全局中断RCC_IRQChannel RCC 全局中断EXTI0_IRQChannel 外部中断线0 中断EXTI1_IRQChannel 外部中断线1 中断EXTI2_IRQChannel 外部中断线2 中断EXTI3_IRQChannel 外部中断线3 中断EXTI4_IRQChannel 外部中断线4 中断DMAChannel1_IRQChannel DMA通道1中断DMAChannel2_IRQChannel DMA通道2中断DMAChannel3_IRQChannel DMA通道3中断DMAChannel4_IRQChannel DMA通道4中断DMAChannel5_IRQChannel DMA通道5中断DMAChannel6_IRQChannel DMA通道6中断DMAChannel7_IRQChannel DMA通道7中断ADC_IRQChannel ADC 全局中断USB_HP_CANTX_IRQChannel USB 高优先级或者CAN发送中断USB_LP_CAN_RX0_IRQChannel USB 低优先级或者CAN接收0 中断CAN_RX1_IRQChannel CAN接收1中断CAN_SCE_IRQChannel CAN SCE 中断EXTI9_5_IRQChannel 外部中断线9-5 中断(5至9对应一个中断源)。