void HAL_JTAG_Set(uint8_t mode) { uint32_t temp; temp = mode; temp <<= 25; __HAL_RCC_AFIO_CLK_ENABLE(); MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_SWJ_CFG, temp) }基于STM32F407中的HAL库进行优化
时间: 2024-04-08 18:28:27 浏览: 34
在基于STM32F407和HAL库的开发环境中,您可以对`HAL_JTAG_Set`函数进行优化。以下是一个可能的优化版本:
```c
void HAL_JTAG_Set(uint8_t mode)
{
uint32_t temp;
temp = mode;
temp <<= SYSCFG_MEMRMP_OFFSET; // 使用宏定义代替具体的位偏移值
__HAL_RCC_SYSCFG_CLK_ENABLE(); // 使用SYSCFG时钟使能宏定义
MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_SWJ_CFG_Msk, temp); // 使用宏定义代替具体的位掩码值
}
```
在这个优化版本中,做了以下改进:
1. 使用宏定义`SYSCFG_MEMRMP_OFFSET`代替具体的位偏移值,以提高代码的可读性和可维护性。
2. 使用宏定义`__HAL_RCC_SYSCFG_CLK_ENABLE()`代替`__HAL_RCC_AFIO_CLK_ENABLE()`,以确保正确使能SYSCFG模块的时钟。
3. 使用宏定义`SYSCFG_MEMRMP_SWJ_CFG_Msk`代替具体的位掩码值,以提高代码的可读性和可维护性。
请注意,这只是一个可能的优化版本,并且具体的改进方法可能因应用需求和开发环境而有所不同。在进行优化时,建议参考相关文档和示例代码,并根据实际情况进行适当修改。
相关问题
void JTAG_Set(u8 mode) { u32 temp; temp=mode; temp<<=25; RCC->APB2ENR|=1<<0; AFIO->MAPR&=0XF8FFFFFF; AFIO->MAPR|=temp; }改为HAL库形式
将该函数改写为HAL库形式的代码如下:
```c
void HAL_JTAG_Set(uint8_t mode)
{
uint32_t temp;
temp = mode;
temp <<= 25;
// Enable the clock for AFIO
__HAL_RCC_AFIO_CLK_ENABLE();
// Configure the JTAG pins
MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, temp);
}
```
请注意,上述代码假设已正确配置了相关的时钟和引脚功能,并且在使用之前已经调用了对应的初始化函数。你可以根据实际情况进行修改和适配。
stm32f103c8t6在keil5软件中JTAG_Set(JTAG_SWD_DIABLE);对应的头文件是什么?
在Keil5中,可以使用STM32CubeMX来生成工程代码,并且自动生成相应的头文件。如果你已经使用了STM32CubeMX生成了代码,并且在代码中使用了JTAG_Set(JTAG_SWD_DISABLE)函数,那么对应的头文件应该是stm32f1xx_hal.h。
在这个头文件中,JTAG_Set函数的定义如下:
```c
HAL_StatusTypeDef HAL_JTAG_SetConfig(JTAG_HandleTypeDef *hjtag, uint32_t Config);
```
其中,第二个参数Config可以是以下值之一:
- JTAG_STM32_DISABLE:禁用JTAG和SWD
- JTAG_SW_ENABLE:仅启用SWD
- JTAG_SW_DISABLE:禁用SWD
因此,JTAG_Set(JTAG_SWD_DISABLE)对应的Config值应该是JTAG_SW_DISABLE。
阅读全文