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

(9)代码配置,点击OK

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


(10)基本配置已完成,点击Project Generate Code 生成代码
STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)

代码生成中ing
STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)


记下路径,记下路径,点击CLOSE (此处直接点击“OPEN PROJECT”可能出问题)



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


(11)KEIL设置
STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)


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

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


点击Flash Download,点击add,选择相应芯片 点击ADD和OK
STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)


utilities中选择J-LINK/J-Trace Cortex
STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)


设置完成后,rebulid一下
STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)



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

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


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


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

  复制图中的“HAL_TIM_PWM”          
      STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)


粘贴到KEIL的Find In File功能中 设置如下  点击“find all”
STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)


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


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


模仿下图中的PWM初始化函数
STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)

所以在main()函数中PWM启动函数和PWM关闭可以这样写
STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)


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

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


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

在TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config)函数中发现了
这句代码
STM32 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)
于是在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 <wbr>HAL库 <wbr>STM32CUBEMX <wbr>KEIL <wbr>TIM1_PWM <wbr>四路输出可调 <wbr>(二)

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一些关于 STM32F103 的 TIM1 PWM 相关的信息。 首先,TIM1STM32F103 的一个高级定时器,它支持多种定时和计数模式。其中,PWM 模式可以通过调节占空比来产生 PWM 波形信号。 以下是使用 STM32CubeMX 配置 TIM1 PWM 的步骤: 1. 打开 STM32CubeMX,选择 STM32F103 的对应型号。 2. 在 Pinout & Configuration 标签页中,选择需要使用的 TIM1 通道对应的引脚。 3. 在 Configuration 标签页中,选择 TIM1,然后将 Mode 设为 PWM Generation CHx。 4. 根据需要设置 PWM 的频率和占空比等参数。 5. 生成代码并导入到 Keil 或者其他编译器中,编写代码控制 TIM1PWM 输出即可。 这里提供一份使用 HAL 库的示例代码,可以在 main 函数中调用 TIM1_PWM_Init() 函数初始化 TIM1,并在 while 循环中调用 TIM1_PWM_Set_Duty() 函数设置 PWM 的占空比: ```c #include "stm32f1xx_hal.h" TIM_HandleTypeDef htim1; void TIM1_PWM_Init(void) { TIM_OC_InitTypeDef sConfigOC; htim1.Instance = TIM1; htim1.Init.Prescaler = 0; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 999; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim1); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 500; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); } void TIM1_PWM_Set_Duty(uint16_t duty) { TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = duty; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); } int main(void) { HAL_Init(); TIM1_PWM_Init(); while (1) { TIM1_PWM_Set_Duty(250); HAL_Delay(1000); TIM1_PWM_Set_Duty(750); HAL_Delay(1000); } } ``` 上述代码中,TIM1_PWM_Init() 函数用于初始化 TIM1PWM 输出TIM1_PWM_Set_Duty() 函数用于设置 PWM 的占空比。 在主函数中,我们调用 TIM1_PWM_Init() 函数初始化 TIM1,然后在 while 循环中反复调用 TIM1_PWM_Set_Duty() 函数,以产生不同占空比的 PWM 波形信号。具体来说,我们设置占空比为 25% 和 75%,并且每次设置后都延迟 1 秒钟,以便观察 PWM 波形的变化。 希望这些信息对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值