510
个编辑
更改
→stm32l4xx_hal_conf.h
==== stm32l4xx_hal_conf.h ====
此例程我们主要给大家展示STM32L4的定时器的中断功能,所以我们宏定义中打开TIM相关的。<syntaxhighlight lang="c" line="1" start="103">
==== stm32l4xx_hal_conf.h ====
此例程我们主要给大家展示STM32L4的独立看门狗功能,所以我们宏定义中打开IWDG相关的。<syntaxhighlight lang="c" line="1" start="103">
==== stm32l4xx_hal_conf.h ====
此例程我们主要给大家展示STM32L4的窗口看门狗功能,所以我们宏定义中打开WWDG相关的。<syntaxhighlight lang="c" line="1" start="103">
==== stm32l4xx_hal_conf.h ====
// 使能的宏
#define HAL_MODULE_ENABLED // 芯片
#define HAL_UART_MODULE_ENABLED // UART
#define HAL_SPI_MODULE_ENABLED // SPI
</syntaxhighlight>
main函数,我们的例程由此处开始执行,首先调用HAL_Init()函数初始化我们的模块,接着调用SystemClock_Config()函数初始化此例程用到的时钟,具体有哪些时钟被初始化,在gyu_util.c部分有详细说明。
<syntaxhighlight lang="c++" line="1" start="32">
HAL_Init();
SystemClock_Config();
// 初始化USART1 MX_USART1_UART_Init(); // 延时500ms,展示软件是否重启(重启则LED闪烁,不重启则LED常亮)初始化按键引脚 HAL_Delay MX_KEY_Init(500); LED_SET //注册按钮回调函数 KEY_RegisterCb(GPIO_PIN_SETAppKey_cb);
// 初始化窗口看门狗SPI初始化 MX_WWDG_InitSpi_Init();
//
while (1)
{
}
}
基础实验中的其他例程,大部分都是使用的相同的时钟配置函数,有特殊的时钟使用,将会在对应例程的源码详解中做针对性说明。
==== gyu_iwdggyu_spi.c ====窗口看门狗初始化函数,初始化窗口看门狗时钟8分频(时钟来源PCLK1 80MHz),配置上窗口值0x50,下窗口值默认0x40,并且使能唤醒中断(可以在唤醒中断中喂狗)。
{
{
_Error_Handler(__FILE__, __LINE__);
}
}
</syntaxhighlight>窗口看门狗初始化,使能窗口看门狗时钟,使能中断。<syntaxhighlight lang="c++" line="1" start="6766">void HAL_WWDG_MspInitHAL_SPI_MspInit(WWDG_HandleTypeDef SPI_HandleTypeDef*hwwdghspi){ // 定义GPIO结构体 GPIO_InitTypeDef GPIO_InitStruct; if(hspi->Instance==SPI1) { // 使能SPI1时钟 __HAL_RCC_SPI1_CLK_ENABLE(); // 配置SPI1引脚 //PA5 ------> SPI1_SCK //PA6 ------> SPI1_MISO //PA7 ------> SPI1_MOSI GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; // 配置SPI1引脚 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽输出 GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上下拉 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; // 高速模式 GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; // 用做SPI1 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化引脚 }</syntaxhighlight><syntaxhighlight lang="c++" line="1" start="96">void SPI_CSN_Init(void)
{
}
</syntaxhighlight>窗口看门狗唤醒中断回调函数,我们可以在这个函数中去调用喂狗的函数。<syntaxhighlight lang="c++" line="1" start="83139">void HAL_WWDG_EarlyWakeupCallbackSpi_Init(WWDG_HandleTypeDef* hwwdgvoid){ HAL_WWDG_Refresh// 初始化CSN引脚 SPI_CSN_Init(hwwdg); // 喂狗初始化SPI1接口 MX_SPI1_Init();
}
</syntaxhighlight>