正在做一个用TIM1 生成6路PWM波的程序,用到了Hal库和CubeMX,代码基本已经成型。
现在出现一个问题,我复位之后重启代码,有时会出现不一样频率的PWM波。
两张图是重启之后的不同情况,100us的周期是设计需要的,但是不知道什么情况造成另一种频率出现。
之后有加按键开关,但是仍然不能解决问题,希望大佬指点一下问题所在。
主要代码在下面附上
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- uint16_t dutycycle = 0;
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- 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 */
- // HAL_TIM_Base_DeInit(&htim1);
- MX_GPIO_Init();
- MX_TIM1_Init();
- /* USER CODE BEGIN 2 */
- // HAL_TIM_Base_Start_IT(&htim1);
- // HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
- // HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
- // HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
-
- // HAL_TIM_Base_Start_IT(&htim3);
-
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
-
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
复制代码
按键开关
- void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
- {
- if(GPIO_Pin == GPIO_PIN_14)
- {
- MX_TIM1_Init();
- HAL_TIM_Base_Start_IT(&htim1);
- HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
- HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
- HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
- }
- if (GPIO_Pin == GPIO_PIN_15)
- {
- HAL_TIM_Base_DeInit(&htim1);
- HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
- HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
- HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
- HAL_TIM_Base_Stop_IT(&htim1);
- }
- }
复制代码
我之前也在考虑是这个问题,首先不知道是什么原因可能造成初始化失败,然后我想试试看能不能用递归函数解决,有没有具体的意见,非常感谢
按键重置初始化我一会试试看
一周热门 更多>