尝试使用CubeMX做stm32开发之九:SYS配置
参考《STM32中文参考手册_V10》,研究CubeMX中有关SYS的配置。
一、配置参数
Debug:
stm32f103支持两种调试接口:串行接口;JTAG接口。
JTAG调试接口(JTAG-DP)需要5个引脚;SW调试接口(SW-DP)需要2个引脚。二者之间有复用引脚。CubeMX中可选择5pin或4pin的JTAG,5pin比4pin多了一个复位引脚。
SW调试端口采用同步串行协议:SWCLK引脚为从主机到从机的时钟信号;SWDIO为双向数据信号。
考虑性价比,在采用48pin这种引脚较少的芯片时,采用SW作为调试端口的方案显然性价比更高。
System Wake-Up:
设置低功耗模式下的自动唤醒功能,通过引脚PA0(这里被ADC_CH0占用了)。
Timebase Source:
一般指HAL的时基,即HAL库中的uwTick,用于实现HAL_Delay()以及作为各种timeout时钟的基准。一般情况下直接选择默认的Sys Tick(嘀嗒定时器)来维护SYS Timebase Source即可,即直接放在SysTick_Handler()中断服务函数中,也就是下面的HAL_IncTick()函数。
/**
* @brief This function handles System tick timer.
*/
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
/* USER CODE BEGIN SysTick_IRQn 1 */
/* USER CODE END SysTick_IRQn 1 */
}
/**
* @brief This function is called to increment a global variable "uwTick"
* used as application time base.
* @note In the default implementation, this variable is incremented each 1ms
* in SysTick ISR.
* @note This function is declared as __weak to be overwritten in case of other
* implementations in user file.
* @retval None
*/
__weak void HAL_IncTick(void)
{
uwTick += uwTickFreq;
}
还有一种情况,当使用操作系统后(不再是裸机运行),操作系统的时基通过SysTick维护,那么HAL的时基一般采用TIMx定时器进行维护。详细细节推荐参考:
二、生成代码
关于Timebase Source,CubeMX生成的定义:
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource)
{
/* Check the parameters */
assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));
if (CLKSource == SYSTICK_CLKSOURCE_HCLK)
{
SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;
}
else
{
SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;
}
}
对比标准库中的定义:
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
/* Check the parameters */
assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
{
SysTick->CTRL |= SysTick_CLKSource_HCLK;
}
else
{
SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
}
}
三、小结
stlink采用的是SW调试接口,jlink采用的是JTAG调试接口。
本次开发中,暂不考虑低功耗模式及其唤醒功能。
对于stm32f103c8t6,一般按照默认采用SysTick实现各种delay功能。