0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

keil+env在STM32H743上實(shí)現(xiàn)pwm呼吸燈

冬至子 ? 來(lái)源:瘋洋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

勾選完成后保存、退出更新,再返回此界面查看是否已經(jīng)更新好(勾好)

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

會(huì)發(fā)現(xiàn)工程中多出了一個(gè)關(guān)鍵性的文件drv_pwm.c

1.jpg

三、修改配置文件

在 rtconfig.h 中可以查看 RT_USING_HWTIMER 和 RT_USING_PWM 的設(shè)備驅(qū)動(dòng)宏定義。

1.jpg

stm32h7xx_hal_conf.h 頭文件查看是否已宏定義HAL_TIM_MODULE_ENABLED 和 HAL_PWR_MODULE_ENABLED,如果沒(méi)有自動(dòng)配置則手動(dòng)取消相關(guān)注釋打開(kāi)并保存

1.jpg

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

1.jpg

為什么要選擇TIM3的第4通道呢?因?yàn)榇薸o(PB1)在正點(diǎn)原子stm32H743上連接了DS0(紅燈),方便我們看實(shí)驗(yàn)

接下來(lái),查看drv_pwm.c中TIM設(shè)備硬件驅(qū)動(dòng)代碼

可以看到,PWM3已經(jīng)被啟用

1.jpg

四、使用STM32CubeMX生成代碼

drv_pwm.c的static rt_err_t stm32_hw_pwm_init(struct stm32_pwm device) 中調(diào)用了 HAL_TIM_MspPostInit(TIM_HandleTypeDef htim) 這個(gè)函數(shù),這樣就需要通過(guò)STM32Cube配置自動(dòng)生成相關(guān)驅(qū)動(dòng)代碼。

1.jpg

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

1.jpg

用管理員方式打開(kāi)STM32CubeMX,再載入此ioc文件

1.jpg

配置TIM3 PWM CH4通道(即PB1)

1.jpg

1.jpg

修改完成后,點(diǎn)擊右上角GENERATE CODE,可能會(huì)下載許多文件,如果下載失敗,有可能是沒(méi)有用管理員方式運(yùn)行,也有可能是連接未建立
可以這樣檢查一下

1.jpg

等下載完成后,可以看到Src文件夾多了一些文件,并且這些文件已經(jīng)加入了工程,其中核心文件就是stm32h7xx_hal_msp.c,里面包含了前文提到的HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim) 這個(gè)函數(shù)

1.jpg

這里可以看一下其中我們用到的重要函數(shù):

打開(kāi)TIM3時(shí)鐘(初始化)

/**

@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參考手冊(cè)官網(wǎng)找到pwm_led.c例程

直接全部復(fù)制,在之前的工程下建立pwm_led.c,復(fù)制代碼后保存,把文件加入工程,查看是否有警告(按理說(shuō)現(xiàn)在沒(méi)有了)

1.jpg

但是編譯后出錯(cuò)(小問(wèn)題,而且按理說(shuō)不應(yīng)該出現(xiàn)該問(wèn)題)

1.jpg

Error_Handler函數(shù)沒(méi)有實(shí)體,所以到STM32CubeMX生成的文件(main.c)中找到該函數(shù)并重新加入(main.h)文件中,再編譯后無(wú)誤。

1.jpg

下載到開(kāi)發(fā)版,使用串口調(diào)用pwm_led_sample命令后,紅燈變?yōu)榱撕粑鼰簟?/p>

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • PWM控制
    +關(guān)注

    關(guān)注

    7

    文章

    194

    瀏覽量

    26389
  • 呼吸燈
    +關(guān)注

    關(guān)注

    10

    文章

    111

    瀏覽量

    42789
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1305

    瀏覽量

    40330
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    284

    瀏覽量

    14943
  • STM32H743
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    1750
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用STM32H743添加rtthread nano pack包會(huì)少board.h文件如何解決?

    使用STM32H743添加rtthread nano pack包會(huì)少board.h文件,使用stm32f1和f4的時(shí)候都沒(méi)有遇見(jiàn)過(guò)。 請(qǐng)問(wèn)這種問(wèn)題該如何解決。
    發(fā)表于 03-22 07:50

    stm32h743 keil5 HAL如何主動(dòng)觸發(fā)死機(jī)?

    stm32h743 keil5 HAL庫(kù) 哪個(gè)函數(shù)接口(類(lèi)似gcc 的__builtin_trap())可以主動(dòng)觸發(fā)死機(jī)?
    發(fā)表于 04-07 06:21

    請(qǐng)問(wèn)stm32h743 NC引腳如何連接?

    看了兩份官方stm32h743的官方評(píng)估版原理圖,一份部分NC引腳接地,另外一份NC引腳旁邊預(yù)留了接電源和地。 NC我理解就是NO CONNECT的意思,現(xiàn)在我的原理圖就差這個(gè)NC引腳不知道
    發(fā)表于 04-09 06:43

    STM32H743怎么FreeRTOS中移植canopen?

    STM32H743怎么FreeRTOS中移植canopen?
    發(fā)表于 07-03 06:32

    STM32H743芯片實(shí)現(xiàn)CAN通信

    1. 摘要本篇筆記主要介紹,STM32H743芯片實(shí)現(xiàn)CAN通信,封裝為BSP驅(qū)動(dòng),為之后實(shí)現(xiàn)CAN的高層通信打下基礎(chǔ)。2. 準(zhǔn)備工作1
    發(fā)表于 08-20 07:41

    STM32H743 Flash用來(lái)存什么

    STM32H743 Flash用來(lái)存什么?STM32H743 Flash的硬件特性和基本操作是什么?
    發(fā)表于 09-24 09:41

    NUCLEO STM32H743怎么使用?

    NUCLEO STM32H743怎么使用?
    發(fā)表于 11-08 06:25

    為什么STM32H743的DMA中斷不起作用?

    2017 年夏天,我開(kāi)始了一個(gè) Nucleo 板使用STM32F767的項(xiàng)目,因?yàn)?H743 仍在發(fā)布但尚未上市。幾個(gè)星期以來(lái),我得到了STM3
    發(fā)表于 02-08 06:44

    STM32H743芯片實(shí)現(xiàn)CAN通信的步驟

    本篇筆記主要介紹,STM32H743芯片實(shí)現(xiàn)CAN通信,封裝為BSP驅(qū)動(dòng),為之后實(shí)現(xiàn)CAN的高層通信打下基礎(chǔ)。
    的頭像 發(fā)表于 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'>實(shí)現(xiàn)</b>CAN通信的步驟

    RT-Thread文件系統(tǒng)組件STM32H743的應(yīng)用

    RT-Thread(后文簡(jiǎn)稱(chēng)RT)提供的DFS組件、Fatfs組件和SDIO驅(qū)動(dòng)組合起來(lái)可用于操作SD卡,但RT的底層驅(qū)動(dòng)目前對(duì)STM32H743(后文簡(jiǎn)稱(chēng)H743)適配不是很好,stm32
    發(fā)表于 12-05 18:36 ?4次下載
    RT-Thread文件系統(tǒng)組件<b class='flag-5'>在</b><b class='flag-5'>STM32H743</b><b class='flag-5'>上</b>的應(yīng)用

    stm32h743外部RAM非字節(jié)對(duì)齊訪問(wèn),引起的hard fault

    stm32h743外部RAM非字節(jié)對(duì)齊訪問(wèn),引起的hard fault
    發(fā)表于 12-09 09:21 ?5次下載
    <b class='flag-5'>stm32h743</b>外部RAM非字節(jié)對(duì)齊訪問(wèn),引起的hard fault

    STM32 使用PWM實(shí)現(xiàn)呼吸

    STM32 PWM實(shí)現(xiàn)呼吸使用STM32F103ZET6 定時(shí)器4 CH2通道產(chǎn)生
    發(fā)表于 12-24 19:41 ?55次下載
    <b class='flag-5'>STM32</b> 使用<b class='flag-5'>PWM</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>

    STM32cube實(shí)現(xiàn)STM32H743的USB驅(qū)動(dòng)

    STM32cube實(shí)現(xiàn)STM32H743的USB驅(qū)動(dòng)基于STM32cube實(shí)現(xiàn)STM32H743
    發(fā)表于 12-28 19:53 ?40次下載
    用<b class='flag-5'>STM32</b>cube<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>STM32H743</b>的USB驅(qū)動(dòng)

    stm32h743軟件模擬i2c驅(qū)動(dòng)

    stm32h743 實(shí)現(xiàn)gpio模擬i2c資料分享
    發(fā)表于 12-01 11:12 ?7次下載

    keil+envSTM32H743實(shí)現(xiàn)pwm呼吸

    RT-Thread Components—->Device Drivers下勾選 Using hardware timer device drivers和Using PWM device drivers
    的頭像 發(fā)表于 06-07 15:08 ?2343次閱讀
    <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'>實(shí)現(xiàn)</b><b class='flag-5'>pwm</b><b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>