Stm32 如何更改LED';在USART1_IRQHandler中使用PWM和USART时的亮度?

Stm32 如何更改LED';在USART1_IRQHandler中使用PWM和USART时的亮度?,stm32,stm32f4discovery,adc,pwm,usart,Stm32,Stm32f4discovery,Adc,Pwm,Usart,我正在使用STM32F4发现板,我正在使用ADC和USART更改LED亮度和定时器周期 我使用DMA获取ADC值,选择TIM4作为PWM,选择USART1作为USART。到目前为止,ADC、USART和PWM工作正常,但USART1\u IRQHandler()没有按预期工作 在下面的USART1\u IRQHandler()实现中,如何使用PWM和ADC调整定时器周期和LED亮度 关于您的USART1_IRQHandler,您是否检查了中断是否在 __HAL_RCC_UART4_CLK_ENA

我正在使用STM32F4发现板,我正在使用ADC和USART更改LED亮度和定时器周期

我使用DMA获取ADC值,选择TIM4作为PWM,选择USART1作为USART。到目前为止,ADC、USART和PWM工作正常,但
USART1\u IRQHandler()
没有按预期工作

在下面的
USART1\u IRQHandler()
实现中,如何使用PWM和ADC调整定时器周期和LED亮度


关于您的USART1_IRQHandler,您是否检查了中断是否在

__HAL_RCC_UART4_CLK_ENABLE();
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
如果您通过此调用启用它

UART_Receive_IT( &huart1 );
我正在使用STM32Cube,repository V1.25.0

现在,关于USART1_IRQHandler()中的代码,您可以使用快捷方式来处理您想要做的事情。如果我理解的话,你有4个LED要用定时器4和4个通道来控制

脉冲是输出比较值(通道1的TIM4->CCR1)。所以,我会用一个等于周期(或零)的脉冲来启动计时器,见下面的注释

从这一点上说,如果你想改变亮度,你只需改变脉冲宽度与

__HAL_TIM_SET_COMPARE( htim4, TIM_CHANNEL_1, pwm_value);
或与

TIM4->CCR1 = pwm_value;
您还可以使用禁用任何通道

__HAL_TIM_DISABLE_IT( htim4, TIM_CHANNEL_1);
__HAL_TIM_ENABLE_IT( htim4, TIM_CHANNEL_1);
所以,你得到了这样的东西

if(i == '1'){
    TIM4->CCR1 = pwm_value;
} else if(i == '2')  {
    TIM4->CCR1 = pwm_value;
    TIM4->CCR2 = pwm_value;
} ...

注意:我不知道LED是如何连接的。如果led连接到Vcc,另一端连接到MPU引脚,则低脉冲将打开led,高脉冲将关闭led。

ı使用PD12、PD13、PD14板上的led,PD15@FurkanGüngör-可能是您在不合适的占空比范围内驱动PWM参数?可能是选择了范围,以便人眼不会注意到LED亮度的差异。然而,这不是一个编程主题(StackOverflow的非主题)-除了需求分析之外,它是软件开发的一部分…:)我修正了我的错误,它的工作很好。亮度变化的通知很明显。还制作了一个关于这个项目的视频。写一个关于这个项目的博客。也用土耳其语解释那里的代码,但你可以在下面看到源代码。我提交了一个编辑建议-你应该用英语保留Q&a和代码示例标识符,所以我替换了我找到的一些土耳其语。我不会说土耳其语,但谷歌翻译会…:)-请重新检查翻译是否正确。
if(i == '1'){
    TIM4->CCR1 = pwm_value;
} else if(i == '2')  {
    TIM4->CCR1 = pwm_value;
    TIM4->CCR2 = pwm_value;
} ...