我的板子是NUCLEO-H743ZI2
我将 TIM4、CH2 配置为 PWM,这样 TIM4 输出应为 HI 半秒和 LO 半秒。这是 block.ioc 时钟和引脚配置
我自动生成了代码并尝试添加自己的代码以使用 PWM 的 H/L 切换 LED。我想做的是:
if(timer_4 == HIGH) LED_state = !LED_state
这是实际的代码:
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ETH_Init();
MX_USART3_UART_Init();
MX_USB_OTG_FS_PCD_Init();
MX_DAC1_Init();
MX_TIM3_Init();
MX_TIM4_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2);
uint16_t timer_init_val = __HAL_TIM_GET_COUNTER(&htim4);
uint16_t timer_poll;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
timer_poll = __HAL_TIM_GET_COUNTER(&htim4);
if(timer_poll - timer_init_val >= 500) {
HAL_GPIO_TogglePin(GPIOB,LD1_Pin);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
我知道这很可能不起作用。实际上。我很困惑,因为用 <=100 替换 >=500 实际上使它看起来像是在工作..但是 LED 只是以看似随机的间隔闪烁。我试图测试 !timer{..} (定时器达到 0)是否切换 LED,但我的方法似乎都不起作用。
我对计时器有误解吗?有什么非常明显的东西我错过了吗?用 1 秒 PWM 闪烁 LED 似乎并不困难