STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)

(9)代码配置,点击OK

STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第1张图片


(10)基本配置已完成,点击Project Generate Code 生成代码
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第2张图片

代码生成中ing
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第3张图片


记下路径,记下路径,点击CLOSE (此处直接点击“OPEN PROJECT”可能出问题)
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第4张图片


在刚才记下的路径中找到MDK-ARM文件夹里面的KEIL工程,用KEIL_4打开
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第5张图片


(11)KEIL设置
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第6张图片


STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第7张图片

电脑连接你的JLINK
 选择J-LINK/J-Trance,点击Settings,设置如下
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第8张图片


点击Flash Download,点击add,选择相应芯片 点击ADD和OK
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第9张图片


utilities中选择J-LINK/J-Trace Cortex
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第10张图片


设置完成后,rebulid一下
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第11张图片



(12)代码分析
编译之后,打开main.c有一个函数重要,在main.c里,右键GO TO Definition of "MX_TIM1_Init"

STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第12张图片


发现我们刚才配置的 分频系数=16,period周期=9999的代码都在这里(注释是我个人添加的)
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第13张图片


这时候的代码只是配置4个通道PWM,并没有启动PWM
我们用追踪法找到PWM启动代码,复制过来用即可

  复制图中的“HAL_TIM_PWM”          
      STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第14张图片


粘贴到KEIL的Find In File功能中 设置如下  点击“find all”
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第15张图片


找到其中两行,注意"HAL_TIM_PWM_Start"和“HAL_TIM_PWM_Stop”这就是PWM的开启和关闭函数
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第16张图片


双击可以查看PWM启动函数第一参数为结构体指针,第二参为通道号
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第17张图片


模仿下图中的PWM初始化函数
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第18张图片

所以在main()函数中PWM启动函数和PWM关闭可以这样写
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第19张图片


到此,程序下载进去可以出波形了
到此,程序下载进去可以出波形了
建议先实验一下,出了波形,能启动关闭PWM了,再继续脉宽调节实验

(13)PWM脉宽调节
调节脉宽我们需要调节sConfigOC.Pulse  
追踪sConfigOC
下图中右击GO TO "HAL_TIM_OC_ConfigChannel"进行追踪
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第20张图片


在HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef* sConfig, uint32_t Channel)函数中sConfigOC传递给了sConfig
找到了TIM_OC1_SetConfig用到了sConfig,继续追踪
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第21张图片

在TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config)函数中发现了
这句代码
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第22张图片
于是在main()函数中添加
TIM1->CCR1 = 任意数值x      //0
即可控制TIM1通道1脉宽,占空比为:   (x)/(9999+1)


其它通道同理:
TIM1->CCR2 = 任意数值x      //0
即可控制TIM1通道2脉宽,占空比为:   (x)/(9999+1)
TIM1->CCR3 = 任意数值x      //0
即可控制TIM1通道3脉宽,占空比为:   (x)/(9999+1)
TIM1->CCR4 = 任意数值x      //0
即可控制TIM1通道4脉宽,占空比为:   (x)/(9999+1)
STM32 HAL库 STM32CUBEMX KEIL TIM1_PWM 四路输出可调 (二)_第23张图片

还有其它函数方法改变脉宽,个人觉得简单实用就好,
 例程下载(STM32F407VET6,8M晶振通过测试)或http://pan.baidu.com/s/1nvrhGfv

你可能感兴趣的:(嵌入式开发)