Timer stm32动态计时器设置更改

Timer stm32动态计时器设置更改,timer,serial-port,stm32,hal,Timer,Serial Port,Stm32,Hal,我正在尝试制作一个设备来接收来自外部传感器(压力传感器)的信号。我正在使用STM32F3发现和USB-USART适配器上的HAL库通过串行端口与计算机通信。我正在向设备发送和接收数据,但我需要一些方法来通过gui应用程序上的按钮更改计时器预分频器和自动加载值(更改采样率)。我该怎么做?我试着做这样的事情: void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart) { if (Recived == 0) { HAL_GPIO_Togg

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

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

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

}
但这显然不起作用:我帮不上忙

编辑:

我认为我在语法方面做了一些错误的事情,因为首先我初始化了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上发送和接收数据,因为有LED

它确实有效。您可以通过引发UG事件来重新加载卷影PSC寄存器。

我发现了以下语句:

/* 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值

首先检查寄存器描述。我也尝试过使用行:TIM7->EGR=TIM\u EGR\u UG;我想,我的语法有问题。我用更多的代码编辑了我的问题,你能看一下吗?F3xx系列的TIM7不产生PWM输出。它是驱动DAC的基本定时器。当然,您只需更改特定的定时器寄存器。我的建议-阅读参考手册,不要显示网络中的“声明”。试着去理解定时器是如何工作的,每件事都会变得显而易见和简单。