串口:
串口操作相关库函数(省略入口参数):
void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位
串口配置的一般步骤:
① 串口时钟使能:RCC_APBxPeriphClockCmd();
GPIO时钟使能:RCC_AHB1PeriphClockCmd();
② 引脚复用映射:
GPIO_PinAFConfig();
③GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF
④串口参数初始化:USART_Init();
⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandler();
⑧串口数据收发:
voidUSART_SendData();//发送数据到串口,DR
uint16_tUSART_ReceiveData();//接受数据,从DR读取接受到的数据
⑨串口传输状态获取:
FlagStatusUSART_GetFlagStatus();
voidUSART_ClearITPendingBit();
外部中断:
中断服务函数列表:
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler
外部中断常用库函数:
① voidSYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex);
//设置IO口与中断线的映射关系
如;SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource2);//区别M3
②void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
//初始化中断线:触发方式等
③ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
//判断中断线中断状态,是否发生
④void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
//清除中断线上的中断标志位
⑤RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//使能SYSCFG时钟
//这个函数非常重要,在使用外部中断的时候一定要先使能SYSCFG时钟
外部中断的一般配置步骤:
① 使能SYSCFG时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
② 初始化IO口为输入。GPIO_Init();
③ 设置IO口与中断线的映射关系。void SYSCFG_EXTILineConfig();
④ 初始化线上中断,设置触发条件等。EXTI_Init();
⑤ 配置中断分组(NVIC),并使能中断。NVIC_Init();
⑥ 编写中断服务函数。EXTIx_IRQHandler();
⑦ 清除中断标志位EXTI_ClearITPendingBit();
看门狗:
独立看门狗:
在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗。此时计数器开始从其复位值0xFFF递减,当计数器值计数到尾值0x000时会产生一个复位信号(IWDG_RESET)。
无论何时,只要在键值寄存器IWDG_KR中写入0xAAAA(通常说的喂狗), 自动重装载寄存器IWDG_RLR的值就会重新加载到计数器,从而避免看门狗复位。
如果程序异常,就无法正常喂狗,从而系统复位。
IWDG独立看门狗操作库函数:
voidIWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//取消写保护:0x5555使能
voidIWDG_SetPrescaler(uint8_t IWDG_Prescaler);//设置预分频系数:写PR
voidIWDG_SetReload(uint16_t Reload);//设置重装载值:写RLR
voidIWDG_ReloadCounter(void);//喂狗:写0xAAAA到KR
voidIWDG_Enable(void);//使能看门狗:写0xCCCC到KR
FlagStatusIWDG_GetFlagStatus(uint16_t IWDG_FLAG);//状态:重装载/预分频 更新
独立看门狗操作步骤:、
① 取消寄存器写保护:IWDG_WriteAccessCmd();
② 设置独立看门狗的预分频系数,确定时钟:IWDG_SetPrescaler();
③ 设置看门狗重装载值,确定溢出时间:IWDG_SetReload();
④ 使能看门狗IWDG_Enable();
⑤ 应用程序喂狗: IWDG_ReloadCounter();
⑥ 溢出时间计算: Tout=((4×2^prer) ×rlr)/32 (M4)
窗口看门狗:
` 窗口看门狗工作过程总结:
STM32F的窗口看门狗中有一个7位的递减计数器T[6:0],它会在出现下述2种情况之一时产生看门狗复位:
① 当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFR寄存器定义。
② 当计数器的数值从0x40减到0x3F时【T6位跳变到0】。
如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以用于喂狗以避免WWDG复位。
窗口看门狗配置过程:
① 使能看门狗时钟:
RCC_APB1PeriphClockCmd();
② 设置分频系数:
WWDG_SetPrescaler();
③ 设置上窗口值:
WWDG_SetWindowValue();
④ 开启提前唤醒中断并分组(可选):
WWDG_EnableIT();
NVIC_Init();
⑤ 使能看门狗:
WWDG_Enable();
⑥ 喂狗:
WWDG_SetCounter();
⑦编写中断服务函数
WWDG_IRQHandler();
串口:
串口操作相关库函数(省略入口参数):
void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位
串口配置的一般步骤:
① 串口时钟使能:RCC_APBxPeriphClockCmd();
GPIO时钟使能:RCC_AHB1PeriphClockCmd();
② 引脚复用映射:
GPIO_PinAFConfig();
③GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF
④串口参数初始化:USART_Init();
⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandler();
⑧串口数据收发:
voidUSART_SendData();//发送数据到串口,DR
uint16_tUSART_ReceiveData();//接受数据,从DR读取接受到的数据
⑨串口传输状态获取:
FlagStatusUSART_GetFlagStatus();
voidUSART_ClearITPendingBit();
外部中断:
中断服务函数列表:
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler
外部中断常用库函数:
① voidSYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex);
//设置IO口与中断线的映射关系
如;SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource2);//区别M3
②void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
//初始化中断线:触发方式等
③ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
//判断中断线中断状态,是否发生
④void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
//清除中断线上的中断标志位
⑤RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//使能SYSCFG时钟
//这个函数非常重要,在使用外部中断的时候一定要先使能SYSCFG时钟
外部中断的一般配置步骤:
① 使能SYSCFG时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
② 初始化IO口为输入。GPIO_Init();
③ 设置IO口与中断线的映射关系。void SYSCFG_EXTILineConfig();
④ 初始化线上中断,设置触发条件等。EXTI_Init();
⑤ 配置中断分组(NVIC),并使能中断。NVIC_Init();
⑥ 编写中断服务函数。EXTIx_IRQHandler();
⑦ 清除中断标志位EXTI_ClearITPendingBit();
看门狗:
独立看门狗:
在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗。此时计数器开始从其复位值0xFFF递减,当计数器值计数到尾值0x000时会产生一个复位信号(IWDG_RESET)。
无论何时,只要在键值寄存器IWDG_KR中写入0xAAAA(通常说的喂狗), 自动重装载寄存器IWDG_RLR的值就会重新加载到计数器,从而避免看门狗复位。
如果程序异常,就无法正常喂狗,从而系统复位。
IWDG独立看门狗操作库函数:
voidIWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//取消写保护:0x5555使能
voidIWDG_SetPrescaler(uint8_t IWDG_Prescaler);//设置预分频系数:写PR
voidIWDG_SetReload(uint16_t Reload);//设置重装载值:写RLR
voidIWDG_ReloadCounter(void);//喂狗:写0xAAAA到KR
voidIWDG_Enable(void);//使能看门狗:写0xCCCC到KR
FlagStatusIWDG_GetFlagStatus(uint16_t IWDG_FLAG);//状态:重装载/预分频 更新
独立看门狗操作步骤:、
① 取消寄存器写保护:IWDG_WriteAccessCmd();
② 设置独立看门狗的预分频系数,确定时钟:IWDG_SetPrescaler();
③ 设置看门狗重装载值,确定溢出时间:IWDG_SetReload();
④ 使能看门狗IWDG_Enable();
⑤ 应用程序喂狗: IWDG_ReloadCounter();
⑥ 溢出时间计算: Tout=((4×2^prer) ×rlr)/32 (M4)
窗口看门狗:
` 窗口看门狗工作过程总结:
STM32F的窗口看门狗中有一个7位的递减计数器T[6:0],它会在出现下述2种情况之一时产生看门狗复位:
① 当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFR寄存器定义。
② 当计数器的数值从0x40减到0x3F时【T6位跳变到0】。
如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以用于喂狗以避免WWDG复位。
窗口看门狗配置过程:
① 使能看门狗时钟:
RCC_APB1PeriphClockCmd();
② 设置分频系数:
WWDG_SetPrescaler();
③ 设置上窗口值:
WWDG_SetWindowValue();
④ 开启提前唤醒中断并分组(可选):
WWDG_EnableIT();
NVIC_Init();
⑤ 使能看门狗:
WWDG_Enable();
⑥ 喂狗:
WWDG_SetCounter();
⑦编写中断服务函数
WWDG_IRQHandler();
举报