STM32F4 – Cần tìm nguyên nhân?

Mình có đoạn code này để tạo xung PWM và đang hoạt động bình thường: có xung PWM tại chân PB8 và led PD12 nháy

#include "stm32f4xx.h"                  // Device header

void delay_ms(uint32_t u32DelayInMs);

void delay_ms(uint32_t u32DelayInMs)
{
	
	while (u32DelayInMs) {
		TIM_SetCounter(TIM6, 0);
		while (TIM_GetCounter(TIM6) < 1000) {
		}
		--u32DelayInMs;
	}
}

int main(void)
{	
	GPIO_InitTypeDef gpioInit;
	TIM_TimeBaseInitTypeDef timInit;
	TIM_OCInitTypeDef pwmInit;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
	
	gpioInit.GPIO_Mode = GPIO_Mode_OUT;
	gpioInit.GPIO_OType = GPIO_OType_PP;
	gpioInit.GPIO_Pin = GPIO_Pin_12;
	gpioInit.GPIO_PuPd = GPIO_PuPd_NOPULL;
	gpioInit.GPIO_Speed = GPIO_High_Speed;
	
	GPIO_Init(GPIOD, &gpioInit);
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
	timInit.TIM_Prescaler = 84 - 1;
	timInit.TIM_Period = 0xFFFF;
	TIM_TimeBaseInit(TIM6, &timInit);
	TIM_Cmd(TIM6, ENABLE);
	
	/* timer 10 */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM10, ENABLE);
	timInit.TIM_Prescaler = 168 - 1;
	timInit.TIM_Period = 10 - 1;
	TIM_TimeBaseInit(TIM10, &timInit);
	
	pwmInit.TIM_OCMode = TIM_OCMode_PWM1;
	pwmInit.TIM_OCPolarity = TIM_OCPolarity_High;
	pwmInit.TIM_Pulse = 2;
	pwmInit.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OC1Init(TIM10, &pwmInit);
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
	
	gpioInit.GPIO_Mode = GPIO_Mode_AF;
	gpioInit.GPIO_OType = GPIO_OType_PP;
	gpioInit.GPIO_Pin = GPIO_Pin_8;
	gpioInit.GPIO_PuPd = GPIO_PuPd_NOPULL;
	gpioInit.GPIO_Speed = GPIO_High_Speed;
	
	GPIO_Init(GPIOB, &gpioInit);
	
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_TIM10);
	
	TIM_Cmd(TIM10, ENABLE);
	
	while (1) {
		GPIO_SetBits(GPIOD, GPIO_Pin_12);
		delay_ms(100);
		//TIM_SetCompare1(TIM10, 4);
		GPIO_ResetBits(GPIOD, GPIO_Pin_12);
		delay_ms(200);
		//TIM_SetCompare1(TIM10, 8);
	}
}

Xung đo tại chân PB8:

Mình thêm 1 đoạn hàm vào, hiện tại hàm này không làm gì cả, và thực hiện lời gọi tới hàm này

void test(uint8_t *pu8Data);

void test(uint8_t *pu8Data)
{

}

Đoạn code trở thành như sau:

#include "stm32f4xx.h"                  // Device header

void delay_ms(uint32_t u32DelayInMs);

void delay_ms(uint32_t u32DelayInMs)
{
	
	while (u32DelayInMs) {
		TIM_SetCounter(TIM6, 0);
		while (TIM_GetCounter(TIM6) < 1000) {
		}
		--u32DelayInMs;
	}
}

void test(uint8_t *pu8Data);

void test(uint8_t *pu8Data)
{

}

uint8_t u8Data[4];

int main(void)
{	
	GPIO_InitTypeDef gpioInit;
	TIM_TimeBaseInitTypeDef timInit;
	TIM_OCInitTypeDef pwmInit;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
	
	gpioInit.GPIO_Mode = GPIO_Mode_OUT;
	gpioInit.GPIO_OType = GPIO_OType_PP;
	gpioInit.GPIO_Pin = GPIO_Pin_12;
	gpioInit.GPIO_PuPd = GPIO_PuPd_NOPULL;
	gpioInit.GPIO_Speed = GPIO_High_Speed;
	
	GPIO_Init(GPIOD, &gpioInit);
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
	timInit.TIM_Prescaler = 84 - 1;
	timInit.TIM_Period = 0xFFFF;
	TIM_TimeBaseInit(TIM6, &timInit);
	TIM_Cmd(TIM6, ENABLE);
	
	/* timer 10 */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM10, ENABLE);
	timInit.TIM_Prescaler = 168 - 1;
	timInit.TIM_Period = 10 - 1;
	TIM_TimeBaseInit(TIM10, &timInit);
	
	pwmInit.TIM_OCMode = TIM_OCMode_PWM1;
	pwmInit.TIM_OCPolarity = TIM_OCPolarity_High;
	pwmInit.TIM_Pulse = 2;
	pwmInit.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OC1Init(TIM10, &pwmInit);
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
	
	gpioInit.GPIO_Mode = GPIO_Mode_AF;
	gpioInit.GPIO_OType = GPIO_OType_PP;
	gpioInit.GPIO_Pin = GPIO_Pin_8;
	gpioInit.GPIO_PuPd = GPIO_PuPd_NOPULL;
	gpioInit.GPIO_Speed = GPIO_High_Speed;
	
	GPIO_Init(GPIOB, &gpioInit);
	
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_TIM10);
	
	TIM_Cmd(TIM10, ENABLE);
	
	test(u8Data);
	
	while (1) {
		GPIO_SetBits(GPIOD, GPIO_Pin_12);
		delay_ms(100);
		//TIM_SetCompare1(TIM10, 4);
		GPIO_ResetBits(GPIOD, GPIO_Pin_12);
		delay_ms(200);
		//TIM_SetCompare1(TIM10, 8);
	}
}

Và kết quả là sau khi nạp chương trình, led vẫn nháy nhưng không có xung PWM???

Mình gửi lên cả 2 project.

Mọi người cùng thảo luận, tìm hiểu xem lý do tại sao?
https://drive.google.com/open?id=1ZA9L4kQdYuviesuxUQ_AZqibQbNM4Era
https://drive.google.com/open?id=17X9soYrPG_6wQhrpafBY5tgfWyL5GVuD

Update:
Mình đã thử thêm với timer 11, timer 13, timer 14 kết quả đều như vậy:
Timer 11 – PWM chân PB9
https://drive.google.com/open?id=1FSgMw1LNmn930gWmYlsgb9UhBwFFBTVa
Timer 13 – PWM chân PA6
https://drive.google.com/open?id=16kiGaRibwCkFpx5Vlnmob0xlEoi_pmEm
Timer 14 – PWM chân PA7
https://drive.google.com/open?id=1DSQ7Haiu16ZvV0qyem88c9I9Na4Q4gIV
Tất cả đều hoạt động bình thường nếu chuyển dòng số 73 gọi hàm test(u8Data); thành comment.