尝试使用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定时器进行维护。详细细节推荐参考:

HAL库中的 SYS Timebase Source 和 SysTick_Handler()_Sunny嵌入式开发的博客-CSDN博客_hal库sysHAL库中的 SYS Timebase Source 和 SysTick_Handler()https://blog.csdn.net/weixin_42429485/article/details/127032146?ops_request_misc=&request_id=&biz_id=102&utm_term=SYS%20timebase%20source&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-127032146.142%5Ev67%5Ejs_top,201%5Ev4%5Eadd_ask,213%5Ev2%5Et3_esquery_v2&spm=1018.2226.3001.4187

二、生成代码

        关于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功能。

物联沃分享整理
物联沃-IOTWORD物联网 » 尝试使用CubeMX做stm32开发之九:SYS配置

发表评论