0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

keil+env在STM32H743上实现pwm呼吸灯

冬至子 来源:疯洋CrazySheep 作者:疯洋CrazySheep 2023-09-15 16:26 次阅读

一、工具

keil+Env+STM32CubeMX

二、在Env中勾选本工程需要的pkgs

RT-Thread Components—->Device Drivers下勾选 Using hardware timer device drivers和Using PWM device drivers

1.jpg

1.jpg

勾选完成后保存、退出更新,再返回此界面查看是否已经更新好(勾好)

最后使用 scons —target=mdk5生成新的工程

会发现工程中多出了一个关键性的文件drv_pwm.c

1.jpg

三、修改配置文件

在 rtconfig.h 中可以查看 RT_USING_HWTIMER 和 RT_USING_PWM 的设备驱动宏定义。

1.jpg

stm32h7xx_hal_conf.h 头文件查看是否已宏定义HAL_TIM_MODULE_ENABLED 和 HAL_PWR_MODULE_ENABLED,如果没有自动配置则手动取消相关注释打开并保存

1.jpg

在board.h 增加 #define BSP_USING_PWM3 和 #define BSP_USING_PWM3_CH4 宏定义,然后保存(会在drv_pwm.c中使用)

1.jpg

为什么要选择TIM3的第4通道呢?因为此io(PB1)在正点原子stm32H743上连接了DS0(红灯),方便我们看实验

接下来,查看drv_pwm.c中TIM设备硬件驱动代码

可以看到,PWM3已经被启用

1.jpg

四、使用STM32CubeMX生成代码

drv_pwm.c的static rt_err_t stm32_hw_pwm_init(struct stm32_pwm device) 中调用了 HAL_TIM_MspPostInit(TIM_HandleTypeDef htim) 这个函数,这样就需要通过STM32Cube配置自动生成相关驱动代码。

1.jpg

首先,找到工程下—->board—->CubeMX_Config文件夹下的CubeMX_Config.ioc文件

1.jpg

用管理员方式打开STM32CubeMX,再载入此ioc文件

1.jpg

配置TIM3 PWM CH4通道(即PB1)

1.jpg

1.jpg

修改完成后,点击右上角GENERATE CODE,可能会下载许多文件,如果下载失败,有可能是没有用管理员方式运行,也有可能是连接未建立
可以这样检查一下

1.jpg

等下载完成后,可以看到Src文件夹多了一些文件,并且这些文件已经加入了工程,其中核心文件就是stm32h7xx_hal_msp.c,里面包含了前文提到的HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim) 这个函数

1.jpg

这里可以看一下其中我们用到的重要函数:

打开TIM3时钟(初始化)

/**

@brief TIM_Base MSP Initialization
This function configures the hardware resources used in this example
@param htim_base: TIM_Base handle pointer
@retval None
/
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef
htim_base)
{
if(htim_base->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspInit 0 /
/
USER CODE END TIM3_MspInit 0 /
/
Peripheral clock enable /
__HAL_RCC_TIM3_CLK_ENABLE();
/
USER CODE BEGIN TIM3_MspInit 1 /
/
USER CODE END TIM3_MspInit 1 */
}
}

io初始化(drv_pwm.c中使用)

1.jpg

void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(htim->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspPostInit 0 /
/
USER CODE END TIM3_MspPostInit 0 */
__HAL_RCC_GPIOB_CLK_ENABLE();
/**TIM3 GPIO Configuration
PB1 ------> TIM3_CH4
/
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/
USER CODE BEGIN TIM3_MspPostInit 1 /
/
USER CODE END TIM3_MspPostInit 1 */
}
}

解除配置(释放资源)

/**

@brief TIM_Base MSP De-Initialization
This function freeze the hardware resources used in this example
@param htim_base: TIM_Base handle pointer
@retval None
/
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef
htim_base)
{
if(htim_base->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspDeInit 0 /
/
USER CODE END TIM3_MspDeInit 0 /
/
Peripheral clock disable /
__HAL_RCC_TIM3_CLK_DISABLE();
/
USER CODE BEGIN TIM3_MspDeInit 1 /
/
USER CODE END TIM3_MspDeInit 1 */
}
}

四、跑pwm

到RT-Thread API参考手册官网找到pwm_led.c例程

直接全部复制,在之前的工程下建立pwm_led.c,复制代码后保存,把文件加入工程,查看是否有警告(按理说现在没有了)

1.jpg

但是编译后出错(小问题,而且按理说不应该出现该问题)

1.jpg

Error_Handler函数没有实体,所以到STM32CubeMX生成的文件(main.c)中找到该函数并重新加入(main.h)文件中,再编译后无误。

1.jpg

下载到开发版,使用串口调用pwm_led_sample命令后,红灯变为了呼吸灯。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM控制
    +关注

    关注

    7

    文章

    194

    浏览量

    26280
  • 呼吸灯
    +关注

    关注

    10

    文章

    110

    浏览量

    42722
  • RT-Thread
    +关注

    关注

    31

    文章

    1285

    浏览量

    40085
  • stm32cubemx
    +关注

    关注

    5

    文章

    283

    浏览量

    14791
  • STM32H743
    +关注

    关注

    0

    文章

    24

    浏览量

    1710
收藏 人收藏

    评论

    相关推荐

    使用STM32H743添加rtthread nano pack包会少board.h文件如何解决?

    使用STM32H743添加rtthread nano pack包会少board.h文件,使用stm32f1和f4的时候都没有遇见过。 请问这种问题该如何解决。
    发表于 03-22 07:50

    stm32h743 keil5 HAL如何主动触发死机?

    stm32h743 keil5 HAL库 哪个函数接口(类似gcc 的__builtin_trap())可以主动触发死机?
    发表于 04-07 06:21

    请问stm32h743 NC引脚如何连接?

    看了两份官方stm32h743的官方评估版原理图,一份部分NC引脚接地,另外一份NC引脚旁边预留了接电源和地。 NC我理解就是NO CONNECT的意思,现在我的原理图就差这个NC引脚不知道
    发表于 04-09 06:43

    STM32H743怎么FreeRTOS中移植canopen?

    STM32H743怎么FreeRTOS中移植canopen?
    发表于 07-03 06:32

    STM32H743芯片实现CAN通信

    1. 摘要本篇笔记主要介绍,STM32H743芯片实现CAN通信,封装为BSP驱动,为之后实现CAN的高层通信打下基础。2. 准备工作1
    发表于 08-20 07:41

    STM32H743 Flash用来存什么

    STM32H743 Flash用来存什么?STM32H743 Flash的硬件特性和基本操作是什么?
    发表于 09-24 09:41

    NUCLEO STM32H743怎么使用?

    NUCLEO STM32H743怎么使用?
    发表于 11-08 06:25

    为什么STM32H743的DMA中断不起作用?

    2017 年夏天,我开始了一个 Nucleo 板使用STM32F767的项目,因为 H743 仍在发布但尚未上市。几个星期以来,我得到了STM3
    发表于 02-08 06:44

    STM32H743芯片实现CAN通信的步骤

    本篇笔记主要介绍,STM32H743芯片实现CAN通信,封装为BSP驱动,为之后实现CAN的高层通信打下基础。
    的头像 发表于 09-14 14:33 1.6w次阅读
    <b class='flag-5'>在</b><b class='flag-5'>STM32H743</b>芯片<b class='flag-5'>上</b><b class='flag-5'>实现</b>CAN通信的步骤

    RT-Thread文件系统组件STM32H743的应用

    RT-Thread(后文简称RT)提供的DFS组件、Fatfs组件和SDIO驱动组合起来可用于操作SD卡,但RT的底层驱动目前对STM32H743(后文简称H743)适配不是很好,stm32
    发表于 12-05 18:36 4次下载
    RT-Thread文件系统组件<b class='flag-5'>在</b><b class='flag-5'>STM32H743</b><b class='flag-5'>上</b>的应用

    stm32h743外部RAM非字节对齐访问,引起的hard fault

    stm32h743外部RAM非字节对齐访问,引起的hard fault
    发表于 12-09 09:21 5次下载
    <b class='flag-5'>stm32h743</b>外部RAM非字节对齐访问,引起的hard fault

    STM32 使用PWM实现呼吸

    STM32 PWM实现呼吸使用STM32F103ZET6 定时器4 CH2通道产生
    发表于 12-24 19:41 55次下载
    <b class='flag-5'>STM32</b> 使用<b class='flag-5'>PWM</b><b class='flag-5'>实现</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>

    STM32cube实现STM32H743的USB驱动

    STM32cube实现STM32H743的USB驱动基于STM32cube实现STM32H743
    发表于 12-28 19:53 40次下载
    用<b class='flag-5'>STM32</b>cube<b class='flag-5'>实现</b><b class='flag-5'>STM32H743</b>的USB驱动

    stm32h743软件模拟i2c驱动

    stm32h743 实现gpio模拟i2c资料分享
    发表于 12-01 11:12 7次下载

    keil+envSTM32H743实现pwm呼吸

    RT-Thread Components—->Device Drivers下勾选 Using hardware timer device drivers和Using PWM device drivers
    的头像 发表于 06-07 15:08 2233次阅读
    <b class='flag-5'>keil+env</b><b class='flag-5'>在</b><b class='flag-5'>STM32H743</b><b class='flag-5'>上</b><b class='flag-5'>实现</b><b class='flag-5'>pwm</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>