如何在usart中断(HAL)中更改全局变量(stm32f407)

如何在usart中断(HAL)中更改全局变量(stm32f407),stm32,Stm32,我想使用蓝牙模块来控制led的状态。我很确定程序会进入中断,因为它可以发回我用智能手机发送的字符。但是我也改变了代码中的全局变量LEDSTATE,但是LED的状态没有改变,我发现变量在一个监视窗口中保持不变。我很困惑。我试图使用关键字volatile或extern,但没有任何改变 volatile uint8_t LEDSTATE=1; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { uint8_t k; UNU

我想使用蓝牙模块来控制led的状态。我很确定程序会进入中断,因为它可以发回我用智能手机发送的字符。但是我也改变了代码中的全局变量LEDSTATE,但是LED的状态没有改变,我发现变量在一个监视窗口中保持不变。我很困惑。我试图使用关键字volatile或extern,但没有任何改变

volatile uint8_t LEDSTATE=1;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    uint8_t k;
    UNUSED(huart);
    HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,1,0xFFFF);

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
    LEDSTATE++;
    LEDSTATE=LEDSTATE%2;
    NUMMM++;
    HAL_UART_Receive_IT(&huart1, aRxBuffer, 1);
}

你搞砸了哈尔API<代码>HAL_UART_RxCpltCallback在中断上下文中工作。您只能在非中断上下文中调用
HAL\u UART\u Transmit
,例如在
main()
中。您可以在
HAL\u UART\u RxCpltCallback
中升起标志,在主循环中读取此标志并使用
HAL\u UART\u Transmit
@StephenPlyaskin,请不要在评论中回答。