motor_f103/User/system/bsp/bsp.c

92 lines
2.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "main.h"
#include "bsp.h"
#define EXIT_LINE LL_EXTI_LINE_16
pvd_irq_handle_cb pvd_irq_handle_cb_func = NULL;
/**
* @brief 配置PVD电源电压检测
*
* 根据给定的电源电压等级配置PVD电源电压检测
*
* @param pwr_level 电源电压等级
* @param call PVD中断处理回调函数
*/
void pvd_configuration(uint32_t pwr_level, pvd_irq_handle_cb call)
{
pvd_irq_handle_cb_func = call;
// 启用电源时钟
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
// 设置PVD电平阈值例如设置为2.4V LL_PWR_PVDLEVEL_2
LL_PWR_SetPVDLevel(pwr_level);
// 启用PVD
LL_PWR_EnablePVD();
// 配置PVD中断
LL_EXTI_EnableIT_0_31(EXIT_LINE); // PVD连接到EXTI Line
LL_EXTI_EnableRisingTrig_0_31(EXIT_LINE);
LL_EXTI_EnableFallingTrig_0_31(EXIT_LINE);
// 启用PVD中断向量
// NVIC_EnableIRQ(PVD_PVM_IRQn);
// NVIC_SetPriority(PVD_PVM_IRQn, 0);
}
/**
* @brief 处理PVD中断
*
* 当PVD中断触发时该函数将被调用以处理中断事件。
*
* @note 无返回值
*/
void pvd_irq_handle(void)
{
if (LL_EXTI_IsActiveFlag_0_31(EXIT_LINE))
{
LL_EXTI_ClearFlag_0_31(EXIT_LINE);
if (pvd_irq_handle_cb_func != NULL)
{
pvd_irq_handle_cb_func();
}
}
}
/**
* @brief 禁用调试接口
*
* 禁用设备的调试接口,包括关闭调试停止模式、调试待机模式和调试睡眠模式。
* 同时将 SWD 和 JTAG 接口的引脚配置为普通 GPIO。
*
* @note disable_debug_interface调用后 SWD 接口会被关闭ST-LINK 等调试工具无法通过 SWD 连接 MCU,也无法使用 STM32 ST-LINK Utility 软件 通过 ST-LINK 连接MCU解除读保护
* 解除读保护流程:Read Out Protection : 改为 Level 0 ,调整为 Level 0 后 Flash 中的程序会被自动擦除。注意:千万不要改为 Level 2 改成Level 2 后 MCU 将会被彻底锁死,相当于熔断保护,无法通过软件再恢复。
*/
void disable_debug_interface(void)
{
// // 使能 SYSCFG 时钟
// LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
// // 关闭调试接口
// LL_DBGMCU_DisableDBGStopMode();
// LL_DBGMCU_DisableDBGStandbyMode();
// LL_DBGMCU_DisableDBGSleepMode();
// // 关闭 SWD 和 JTAG 接口
// LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
// // 配置 SWDIO (PA13) 和 SWCLK (PA14) 引脚为普通 GPIO
// GPIO_InitStruct.Pin = LL_GPIO_PIN_13 | LL_GPIO_PIN_14;
// GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
// GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
// LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// // 如果使用的是 JTAG 接口,还需要配置 JTDI (PA15), JTDO (PB3), 和 NJTRST (PB4) 引脚
// GPIO_InitStruct.Pin = LL_GPIO_PIN_15;
// LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// GPIO_InitStruct.Pin = LL_GPIO_PIN_3 | LL_GPIO_PIN_4;
// LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}