设为首页 加入收藏

TOP

基于STM32F767两路互补SPWM波(HAL库)(二)
2019-07-11 22:10:05 】 浏览:264
Tags:基于 STM32F767 互补 SPWM HAL
eadTime(
&TIM1_Handler, &BreakDeadTime_Config); //中断配置 HAL_NVIC_SetPriority(TIM1_CC_IRQn,1,3); //设置中断优先级,抢占优先级1,子优先级3 HAL_NVIC_EnableIRQ(TIM1_CC_IRQn); //开启ITM3中断 //开启PWM并使能中断 HAL_TIM_PWM_Start_IT(&TIM1_Handler, TIM_CHANNEL_1); //开启PWM输出并使能中断 HAL_TIMEx_PWMN_Start(&TIM1_Handler, TIM_CHANNEL_1); //打开互补通道 } //定时器底层驱动,时钟使能,引脚配置 //此函数会被HAL_TIM_PWM_Init()调用 //htim:定时器句柄 void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_TIM1_CLK_ENABLE(); //使能定时器3 __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_Initure.Pin=PWM_PIN1 | PWM_PIN2; //PWM Pin GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推完输出 GPIO_Initure.Pull=GPIO_PULLUP; //上拉 GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速 GPIO_Initure.Alternate=GPIO_AF1_TIM1; //PA8复用为TIM1_CH1 HAL_GPIO_Init(PWM_GPIO,&GPIO_Initure); } //设置TIM通道4的占空比 //compare:比较值 void TIM_SetTIM1Compare1(u32 compare) { TIM1->CCR1=compare; } //定时器1中断服务函数 void TIM1_CC_IRQHandler(void) //注意名称与通用计时器不同,多了 CC { HAL_TIM_IRQHandler(&TIM1_Handler); } //定时器1中断服务函数调用 void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) { if(htim==(&TIM1_Handler)) { count ++; if(count == sin_points) count = 0; sin_k = TIM1_ARR / 200.0 * (float)(spwm_max_duty - spwm_min_duty ) ; //正弦波的比例系数,一个简单的数学代换//更正为相减 sin_b = TIM1_ARR / 200.0 * (float)(spwm_max_duty + spwm_min_duty ) ; //正弦波的截距//更正为相加 cc1_value = (uint16_t) (sin_k * sin( (double)count * 6.28318 / (double)sin_points) + sin_b); //正弦值计算,得到SPWM波占空比 TIM_SetTIM1Compare1(cc1_value); } }

 主函数配置为

TIM1_PWM_Init(5400-1,2-1);     //216M / (5400 * 2 ) = 20K

 

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇算法-约瑟夫问题 下一篇关于 exynos 4412 按键中断 异步..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目