STM32动态定时器设置更改

3

我正在尝试制作一个设备来接收外部传感器(压力传感器)的信号。我使用STM32F3Discovery上的HAL库和USB-USART适配器通过串行端口与计算机通信。我发送和接收来自设备的数据,但是我需要一种方式来通过GUI应用程序上的按钮更改定时器预分频器和自动重装载值(以更改采样率)。我该怎么做?我试图做这样的事情:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart) {
if (Recived == 0) {

    HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_11);
    TIM7->PSC = 119;
    TIM7->ARR = 5999;

}

但显然没有起作用:D,请帮忙。

编辑:

我认为我的语法有问题,因为首先我是这样初始化 tim7 的:

static void MX_TIM7_Init(void)
{

 TIM_MasterConfigTypeDef sMasterConfig;

  htim7.Instance = TIM7;
  htim7.Init.Prescaler = 9999;
  htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim7.Init.Period = 719;
  if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
  {
    Error_Handler();
  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != 
HAL_OK)
  {
    Error_Handler();
  }
   }    

然后我试图在我的主函数中重新配置tim7,像这样:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart) {
if (Recived == 0) {

    HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_11);
    TIM7->PSC = 119;
    TIM7->ARR = 5999;
    TIM7->EGR = TIM_EGR_UG;

}
    MX_TIM7_Init();
if(Recived == 1){

    HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_12);
    TIM7->PSC = 9999;
    TIM7->ARR = 719;
    TIM7->EGR = TIM_EGR_UG;

}
}

我确定我在uC上发送和接收数据,因为灯光亮了起来。


首先检查寄存器描述。 - Bence Kaulics
2个回答

0

它肯定有效。 通过触发UG事件可以重新加载阴影PSC寄存器。


我也尝试过使用以下代码:TIM7->EGR = TIM_EGR_UG;我认为,我的语法有些错误。我已经在我的问题中编辑了更多的代码,您可以看一下吗? - Natoll

0

我发现了这个语句:

/* Set the Autoreload value */
 TIMx->ARR = (uint32_t)Structure->Period ;

/* Set the Prescaler value */
TIMx->PSC = (uint32_t)Structure->Prescaler;

if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx))  
   {
    /* Set the Repetition Counter value */
  TIMx->RCR = Structure->RepetitionCounter;
}

/* Generate an update event to reload the Prescaler 
 and the repetition counter(only for TIM1 and TIM8) value immediatly */
TIMx->EGR = TIM_EGR_UG;
}

我能否仅重新加载TIM1和TIM8的PSC和ARR值?


F3xx系列中的TIM7不会生成PWM输出。它是一个基本定时器,用于驱动DAC。 - 0___________
当然,你只需要更改特定的计时器寄存器。我的建议是阅读参考手册,不要展示在网络上找到的“语句”。尝试理解计时器的工作原理,一切都会变得明显和容易。 - 0___________

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接