c - 读取STM32定时器值
问题描述
我正在使用 STM32F103 芯片,我正在尝试配置和使用其中一个定时器。我使用 STM32CubeMX 生成初始化定时器 2 的代码。我通过调用 HAL_TIM_Base_Start 来启动定时器。然后,在一个循环中,我通过调用 htim2.Instance->CNT 或调用宏 __HAL_TIM_GetCounter(我相信它只会返回相同的值)打印出当前计时器值。但是,无论我做什么,计数值都显示为零。我也尝试过在开始时调用 __TIM2_CLK_ENABLE() ,但这没有区别。
我已经搜索了一个解决方案,并发现了一些关于这个问题的问题,但还没有找到解决方案。
有谁知道我做错了什么?
谢谢。
这是初始化计时器的例程。此代码由 STM32CubeMX 生成,我没有修改它:
/* TIM2 init function */
static void MX_TIM2_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 0;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 0;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
然后我主要尝试启动计时器并尝试打印出它的值。这是我用来执行此操作的代码:
__TIM2_CLK_ENABLE();;
HAL_TIM_Base_Start(&htim2);
while (true)
{
Serial.println((long) __HAL_TIM_GetCounter(&htim2));
delay(100);
}
'Serial' 类是我编写的一个类,它通过 USB 串行端口与我的 PC 通信。
解决方案
不用HAL试试,不复杂。
void start_TIM2() {
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
TIM2->CR1 |= TIM_CR1_EN;
}
uint16_t read_TIM2() {
return TIM2->CNT;
}
推荐阅读
- c# - C# Windows 窗体 Web Api 身份验证
- python - 为什么熊猫会抛出“数据重叠”。当我使用 pd.update 时?
- python-3.x - 如何在 django 的数据库中连续保存倒计时天数?
- javascript - 将日期范围过滤器添加到数据表
- git - Intellij 不再显示“解决冲突”对话框?
- git - git push 不工作 - 说一切都是最新的,但显然不是
- node.js - mongodb / nodejs:findandmodify方法不起作用
- html - 一次编辑多个元素的 emmet 快捷方式
- python - 日期时间字段第 1 行的“last_trade_time”列的数据被截断
- cvi - 从串口读取的标准方法是什么