2017-05-24 181 views
0

我试图让设备接收来自外部传感器(压力传感器)的信号。我在STM32F3Discovery和USB-USART适配器上使用HAL库,通过串口与计算机进行通信。我发送数据到设备或从设备接收数据,但我需要一些方法来改变定时器预分频器和自动重新加载值(更改采样率),我的gui应用程序上有一个按钮。我怎样才能做到这一点?我试图做这样的事情:stm32动态计时器设置更改

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上接收它,因为LED。

+0

先查看寄存器说明。 –

回答

0

它肯定会工作。您可以通过提升UG事件来重新加载影子PSC寄存器。

+0

我也试过用线: 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价值?

+0

F3xx系列中的TIM7不会产生PWM输出。这是驱动DAC的基本计时器。 –

+0

当然,你只能改变一个特殊的定时器寄存器。我的建议 - 阅读参​​考手册,不要显示在网络某处发现的“声明”。试着了解计时器是如何工作的,每一步都会变得简单明了。 –