stm8无法读取亚秒SubSecond

STM8L052C6T6 RTC 亚秒读取问题
博客详细介绍了在STM8L052C6T6微控制器上遇到的问题,该控制器由于缺乏SS_RX寄存器而无法正确读取RTC亚秒数据。作者分享了尝试读取RTC亚秒的具体代码,并解释了为何这种尝试会失败。

调用库函数读出的数据为零。后来发现,是因为我用的是stm8l052c6t6。stm8l052c6 没有ss_rx寄存器不能读亚秒.

uint16_t RTC_GetSubSecond(void)//stm8l052c6 没有ss_rx寄存器不能读亚秒
{
  uint8_t ssrhreg = 0, ssrlreg = 0;
  uint16_t ssrreg = 0;

  /* Get subseconds values from the correspondent registers*/
  ssrhreg = RTC->SSRH;
  ssrlreg = RTC->SSRL;

  /*read DR3 register to unfroze calender registers */
  (void) (RTC->DR3);

  /* Clear RSF flag by writing 0 in RSF bit通过在RSF位中写入0来清除RSF标志 */
  RTC->ISR1 &= (uint8_t)~(RTC_ISR1_RSF);

  ssrreg = (uint16_t)((uint16_t)((uint16_t)ssrhreg << 8) | (uint16_t)(ssrlreg));
  return (uint16_t)(ssrreg);

}

### STM32F103 使用 CubeMX 配置级定时器 STM32F103 微控制器支持通过 TIMx 外设实现高精度的定时功能。利用 STMicroelectronics 提供的 STM32CubeMX 工具可以简化外设初始化过程,从而快速配置级定时器。 #### 定时器基础概念 STM32 的通用定时器(TIMx)基于计数器工作模式,能够提供精确的时间间隔测量或触发事件的功能[^1]。为了实现级定时,通常会设置较高的预分频系数和重装载值来达到所需的分辨率。 #### 步骤说明 以下是使用 STM32CubeMX 和 HAL 库配置级定时器的主要方法: 1. **创建项目并选择设备** 打开 STM32CubeMX 软件,新建一个工程文件,并选择目标 MCU 型号为 `STM32F103C8T6` 或其他变体型号[^2]。 2. **启用所需定时器** 在 Pinout & Configuration 页面中找到 RCC 选项卡下的 Clock Configuration 子菜单,调整系统时钟频率至最高性能水平 (72 MHz)[^3]。接着,在 Peripherals 列表里激活某个通用定时器模块比如 TIM2/TIM3 等作为时间基准源。 3. **参数设定** 进入所选定时器的具体属性页面,按照如下方式填写关键字段: - Prescaler: 设置合适的预分频数值以便降低实际运行速度;例如当 APB1 总线速率等于 PCLK1=36MHz,则需填入 `(PCLK1 / DesiredFrequency)-1` 计算得出的结果。 ```plaintext 如果希望每微中断一次,则Prescaler应设为(36e6/1e6)-1即35. ``` - Auto Reload Register: 输入期望周期长度对应的脉冲数量减一后的整数值; 若上述例子继续沿用,则AutoReloadRegister应当赋值999表示满量程范围内的千次循环完成一轮更新操作[^4]. 4. **生成代码框架** 当全部硬件资源分配完毕之后点击“Generate Code”按钮导出适用于特定开发环境的基础驱动程序包[^5]。 5. **编写应用逻辑** 修改自动生成的应用入口函数main.c中的相关内容部分, 添加必要的回调处理机制用于响应由指定通道产生的溢出信号或其他关联动作: ```c void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ static uint32_t counter = 0; if(htim->Instance == htimX.Instance){ // Replace 'X' with your chosen timer number counter++; if(counter >= SUBSECOND_INTERVAL_IN_MS){ /* Insert user-defined task here */ counter = 0; // Reset after execution completes successfully } } } ``` #### 注意事项 - 实际部署过程中可能还需要考虑外部晶振稳定性以及电源波动等因素的影响程度大小不等问题[^6]。 - 对于更复杂的场景建议采用高级控制手段如DMA传输或者多路复用技术提升整体效率表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值