2017-05-24 109 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

當然,你只能改變一個特殊的定時器寄存器。我的建議 - 閱讀參​​考手冊,不要顯示在網絡某處發現的「聲明」。試着瞭解計時器是如何工作的,每一步都會變得簡單明瞭。 –