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

发布者:幸福微风最新更新时间:2024-05-08 来源: elecfans关键字:keil  STM32H743 手机看文章 扫描二维码
随时随地手机看文章

一、工具

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命令后,红灯变为了呼吸灯。


关键字:keil  STM32H743 引用地址:keil+env在STM32H743上实现pwm呼吸灯

上一篇:基于STM32F429芯片的单片机芯片内存映射图
下一篇:如何评估MCU满足项目需求?STM32系列单片机如何选型?

推荐阅读最新更新时间:2024-11-15 12:00

Keil c51 C程序延时时间
如果你要很精确的延时,可以使用定时器,C语言的定时比较难计算,你可以用KEIL里的软件仿真看看运行你的子程序需要多少时间,这样是最清楚的了。当然,如果你的编程能力已经达到比较高的水平就另一个说法,只要程序简洁,C或汇编都一样的高效率。下面我发一些别人的见解用C语言实现延时程序,首先想到的就是C常用的循环语句。下面这段代码是我经常在网上看到的: void delay2(unsigned char i){  for(; i != 0; i--);} 到底这段代码能达到多高的精度呢?为了直接衡量这段代码的效果,我把 Keil C 根据这段代码产生的汇编代码找了出来: ; FUNCTION _delay2 (BEGIN)   
[单片机]
keil通过UART串口打印汉字到串口工具乱码的问题
近通过STMCubexMX生成的代码程序,将打印的字符串通过uart串口打印出来,发现中文字符乱码,参考了keil5串口USART输出中文乱码的解决方法_zhouml_msn的博客-CSDN博客_串口输出中文 但是我解决的方法正好和他的相反;程序中要打印的汉字在,MobaXterm中显示如下: 通过记事本打开main.c文件发现它是以ANSI格式保存的, 通过:文件- 另存为- 编码格式改成UTF-8,覆盖原来的文件 再重新编译,下载就正常显示中文字符
[单片机]
<font color='red'>keil</font>通过UART串口打印汉字到串口工具乱码的问题
KeilC51常用功能模块使用说明
本文档包括单片机系统中常用到的时钟中断、通讯及键盘扫描等模块(见所附源程序)的说明。这些模块使用前后台系统模型。为达到最大的灵活性, 需要在用户工程中定义config.h文件, 在其中定义各模块可选参数的设置,而不是直接更改源代码。 这些可选内容大部分为宏定义,如果不定义宏相应的功能在编译时被屏蔽,不会增加代码长度。 具体可选内容见各模块中的说明。 在Config.h文件中还要包含一个单片机硬件的资源头文件。 各模块使用了定义在Common.h中的一些数据类型。如:BIT(bit) BYTE(unsigned char)等,具体请参见源程序。 时钟模块   在单片机软件设计中, 时钟是重要资源, 为了充分利用时钟资源, 故设计
[单片机]
Keil 出现Debug Error! DAMAGE:after Normal block
Keil编译程序没有问题,在下载程序的时候出现: 甚至于出现,Keil死掉的情况 因为程序可以编译过,所以程序本身并没有问题,当下载时出问题就应该是 程序太大超出了单片机Flash、RAM太大等地方的问题。 最后检查是因为程序太大,所用单片机的Flash只有16K。而程序大小超过了16K。
[单片机]
<font color='red'>Keil</font> 出现Debug Error! DAMAGE:after Normal block
Keil MDK使用第5篇---解决st-link 不能用状态
一直用的好好的 ,突然st-link不能用了,出现下边这个情况,上网一查很多人都有这个问题,就研究了下。 注意:因为是一直可以使用,所以这里不再赘述是否没有驱动的问题,这其实应是第一步检查的。 首先应排除硬件问题,若使用为台式机,可以试试使用背部面板USB口。 然后就是降低传输速率,确认使用下载方式正确。 还是不可以,可以按照以下步骤检查。 1.首先先检查连线,然后检查keil下载配置(这里不再赘述,参见另一篇博文《keil下载配置》) 2.还是不行的话,就试试下边的方法 首先,翻译下错误:internal command error 内部命令错误 找了几
[单片机]
使用Keil语言的嵌入式C编程教程(上)
嵌入式系统是指以单片机为核心的嵌入式C编程软硬件的结合,旨在完成特定的任务。这些类型的嵌入式系统正在我们的日常生活中使用,如洗衣机、录像机、冰箱等。嵌入式系统首先由8051单片机介绍。 8051单片机简介 8051微控制器是一个基本的微控制器,它是由英特尔公司自1970年首次推出。它是由8086处理器体系结构开发的。8051是一个微控制器家族,由飞利浦、阿特梅尔、戴尔等不同厂商开发。8051微控制器已经应用于从儿童玩具到大型汽车系统的许多嵌入式产品中。 8051微控制器是8位“CISC”结构。它由存储器、串行通信、中断、输入/输出端口和定时器/计数器组成,内置于一个集成芯片中,通过编程控制与之接口的外围设备。
[单片机]
使用<font color='red'>Keil</font>语言的嵌入式C编程教程(上)
Keil MDK 下 uC/OS-II 在LPC11C14上的移植
uCOS-II 在 ARM上的移植很常见,而在 KEIL MDK 下的移植却不是很多,根据 ARM 下的移植范例,结合自己最近使用 KEIL MDK 的稍许心得,记录一下 uCOS-II 在 KEIL MDK 下的移植过程。在移植过程中也参考了他人的资料如有部分雷同请谅解,本文仅也供个人参考,共同学习。 uCOS II是一个源码公开、可移植、可固化、可剪裁和抢占式的实时多任务操作系统。 移植:就是使得一个实时内核,或者应用的代码在某个微处理器或微控制器平台上运行。 一:准备源码 1、在官网上下载了 uCOS-II 的源码,好像是 2..91 的了. 官网下载地址: http://www.micrium.com NX
[单片机]
<font color='red'>Keil</font> MDK 下 uC/OS-II 在LPC11C14上的移植
stm32 pwm 呼吸灯
#include main.h #include stm32f0xx_hal.h /* USER CODE BEGIN Includes */ int i=0; /* USER CODE END Includes */ /* Private variables ---------------------------------------------------------*/ TIM_HandleTypeDef htim3; UART_HandleTypeDef huart1; /* USER CODE BEGIN PV */ /* Private variables --------------------
[单片机]
stm32 <font color='red'>pwm</font> <font color='red'>呼吸灯</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved