STM32_4串口,看门狗

串口:

       串口操作相关库函数(省略入口参数)

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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值