国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2025年07月16日(星期三)

2019年07月16日 | STM32開發(fā)筆記32:STM32F4定時(shí)器驅(qū)動(dòng)程序的移植

發(fā)布者:亞瑟摩根 來源: eefocus關(guān)鍵字:STM32  STM32F4  定時(shí)器  驅(qū)動(dòng)程序  移植 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

單片機(jī)型號(hào):STM32F401


    本文講述移植STM32CubeMX生成的驅(qū)動(dòng)程序到自己的項(xiàng)目中,以定時(shí)器為例。為什么要寫這篇文章呢?是因?yàn)槎〞r(shí)器移植這件事情耗費(fèi)了我整整2天的時(shí)間,只因?yàn)橐粋€(gè)特殊的地方?jīng)]有注意到。把整個(gè)移植過程用文字記錄下來,以利于自身其它程序的移植,并對本文的讀者提供一些技術(shù)上的參考。


    1、如果僅完成計(jì)時(shí)功能,在STM32CubeMX中設(shè)置比較簡單,如下圖所示,只需指定其時(shí)鐘源即可。



    2、對時(shí)鐘進(jìn)行進(jìn)一步設(shè)置,這個(gè)在先前的日志中已經(jīng)描述過,將分頻系數(shù)與MCU的主頻系數(shù)設(shè)置成一致,例如我現(xiàn)在MCU的主頻是72M,則進(jìn)行72分頻即可,這樣單位計(jì)數(shù)周期是1us,按照下圖所示,我在Counter Period中設(shè)置為1000,則定時(shí)器的中斷時(shí)間是1ms。



    3、設(shè)置定時(shí)器中斷。


    4、生成工程文件。


    5、有了上述準(zhǔn)備后,我們就可已將工程移植到自己的項(xiàng)目中了。


    6、建立定時(shí)器相應(yīng)的CPP和H文件,H文件的代碼如下:


/*

 * Timer3ê???2úéú1ms?¨ê±

 */

#ifndef TIMER3_H_

#define TIMER3_H_

 

void CommonTimer_InterruptFunction(void);

 

#ifdef __cplusplus

extern "C"{

 

class CTimer3

{

public:

void SetMode(uint8_t mode);

};

 

}

#endif

#endif

    7、復(fù)制定時(shí)器初始化函數(shù)中的程序到SetMode函數(shù)中。


    8、復(fù)制中斷函數(shù)中的內(nèi)容到CPP文件中。


    9、復(fù)制初始化文件中的內(nèi)容到CPP文件中。


    10、在CPP文件中定義自己的中斷服務(wù)處理函數(shù),以方便在main.cpp中調(diào)用,完整的CPP文件如下:


#include "include.h"

 

TIM_HandleTypeDef htim3;

 

void CTimer3::SetMode(uint8_t mode)

{

  TIM_ClockConfigTypeDef sClockSourceConfig;

  TIM_MasterConfigTypeDef sMasterConfig;

 

  htim3.Instance = TIM3;

if (mode == 0)

{

htim3.Init.Prescaler = 72;

htim3.Init.CounterMode = TIM_COUNTERMODE_UP;

htim3.Init.Period = 1000;

htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

}

  if (HAL_TIM_Base_Init(&htim3) != HAL_OK)

  {

    Target.ErrorHandler(__FILE__, __LINE__);

  }

 

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

  if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)

  {

    Target.ErrorHandler(__FILE__, __LINE__);

  }

 

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)

  {

    Target.ErrorHandler(__FILE__, __LINE__);

  }

HAL_TIM_Base_Start_IT(&htim3);

}

 

void TIM3_IRQHandler(void)

{

  HAL_TIM_IRQHandler(&htim3);

}

 

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

if (htim->Instance == htim3.Instance)

{

CommonTimer_InterruptFunction();

}

}

 

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)

{

  if(htim_base->Instance==TIM3)

  {

    __HAL_RCC_TIM3_CLK_ENABLE();

    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);

    HAL_NVIC_EnableIRQ(TIM3_IRQn);

  }

}

 

void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)

{

  if(htim_base->Instance==TIM3)

  {

    __HAL_RCC_TIM3_CLK_DISABLE();

    HAL_NVIC_DisableIRQ(TIM3_IRQn);

  }

}

    11、完成上述步驟后,還需對2個(gè)文件進(jìn)行設(shè)置,首先設(shè)置stm32f4xx_hal_conf.h文件,打開相應(yīng)的驅(qū)動(dòng)模塊,如下所示。


/* ########################## Module Selection ############################## */

/**

  * @brief This is the list of modules to be used in the HAL driver 

  */

#define HAL_MODULE_ENABLED  

 

#define HAL_ADC_MODULE_ENABLED

/* #define HAL_CRYP_MODULE_ENABLED   */

/* #define HAL_CAN_MODULE_ENABLED   */

/* #define HAL_CRC_MODULE_ENABLED   */

/* #define HAL_CRYP_MODULE_ENABLED   */

/* #define HAL_DAC_MODULE_ENABLED   */

/* #define HAL_DCMI_MODULE_ENABLED   */

/* #define HAL_DMA2D_MODULE_ENABLED   */

/* #define HAL_ETH_MODULE_ENABLED   */

/* #define HAL_NAND_MODULE_ENABLED   */

/* #define HAL_NOR_MODULE_ENABLED   */

/* #define HAL_PCCARD_MODULE_ENABLED   */

/* #define HAL_SRAM_MODULE_ENABLED   */

/* #define HAL_SDRAM_MODULE_ENABLED   */

/* #define HAL_HASH_MODULE_ENABLED   */

/* #define HAL_I2C_MODULE_ENABLED   */

/* #define HAL_I2S_MODULE_ENABLED   */

/* #define HAL_IWDG_MODULE_ENABLED   */

/* #define HAL_LTDC_MODULE_ENABLED   */

/* #define HAL_RNG_MODULE_ENABLED   */

/* #define HAL_RTC_MODULE_ENABLED   */

/* #define HAL_SAI_MODULE_ENABLED   */

/* #define HAL_SD_MODULE_ENABLED   */

/* #define HAL_MMC_MODULE_ENABLED   */

#define HAL_SPI_MODULE_ENABLED

#define HAL_TIM_MODULE_ENABLED   

/* #define HAL_UART_MODULE_ENABLED   */

/* #define HAL_USART_MODULE_ENABLED   */

/* #define HAL_IRDA_MODULE_ENABLED   */

/* #define HAL_SMARTCARD_MODULE_ENABLED   */

/* #define HAL_WWDG_MODULE_ENABLED   */

#define HAL_PCD_MODULE_ENABLED

/* #define HAL_HCD_MODULE_ENABLED   */

/* #define HAL_DSI_MODULE_ENABLED   */

/* #define HAL_QSPI_MODULE_ENABLED   */

/* #define HAL_QSPI_MODULE_ENABLED   */

/* #define HAL_CEC_MODULE_ENABLED   */

/* #define HAL_FMPI2C_MODULE_ENABLED   */

/* #define HAL_SPDIFRX_MODULE_ENABLED   */

/* #define HAL_DFSDM_MODULE_ENABLED   */

/* #define HAL_LPTIM_MODULE_ENABLED   */

#define HAL_GPIO_MODULE_ENABLED

#define HAL_DMA_MODULE_ENABLED

#define HAL_RCC_MODULE_ENABLED

#define HAL_FLASH_MODULE_ENABLED

#define HAL_PWR_MODULE_ENABLED

#define HAL_CORTEX_MODULE_ENABLED

    12、在stm32f4xx_it.h中添加相應(yīng)的中斷服務(wù)處理函數(shù),如下所示。


void NMI_Handler(void);

void HardFault_Handler(void);

void MemManage_Handler(void);

void BusFault_Handler(void);

void UsageFault_Handler(void);

void SVC_Handler(void);

void DebugMon_Handler(void);

void PendSV_Handler(void);

void SysTick_Handler(void);

void TIM3_IRQHandler(void);

void OTG_FS_IRQHandler(void);

    至此,就完成了整個(gè)驅(qū)動(dòng)程序的移植工作,我所忽略的地方就是stm32f4xx_it.h文件,必須在這個(gè)文件中添加相應(yīng)的中斷服務(wù)處理函數(shù),才能夠使startup_stm32f401xc.s文件中中斷向量與C文件中的中斷服務(wù)處理函數(shù)對應(yīng)上,否則中斷服務(wù)處理函數(shù)得不到調(diào)用。


關(guān)鍵字:STM32  STM32F4  定時(shí)器  驅(qū)動(dòng)程序  移植 引用地址:STM32開發(fā)筆記32:STM32F4定時(shí)器驅(qū)動(dòng)程序的移植

上一篇:STM32開發(fā)筆記33:解決USB CDC “該設(shè)備無法啟動(dòng)”問題
下一篇:STM32開發(fā)筆記31: STM32F4系列LQFP64封裝引腳的兼容性

推薦閱讀

據(jù)悉,南京市將出臺(tái)《關(guān)于打造集成電路產(chǎn)業(yè)地標(biāo)的實(shí)施方案》,明確集成電路產(chǎn)業(yè)發(fā)展目標(biāo)。到2025年,全市集成電路產(chǎn)業(yè)綜合銷售收入力爭達(dá)到1500億元,進(jìn)入國內(nèi)第一方陣,在5G通信及射頻芯片、先進(jìn)晶圓制造、物聯(lián)網(wǎng)和汽車電子等高端芯片設(shè)計(jì)等細(xì)分領(lǐng)域?qū)崿F(xiàn)全省第一、全國前三、國際知名。支持集成電路產(chǎn)業(yè)垂直整合及并購重組,建立總規(guī)模200億美元的南京市...
單片機(jī)型號(hào):STM32F070F6P6本文介紹應(yīng)用C語言進(jìn)行單片機(jī)內(nèi)部Flash的讀寫技巧,將從查看文檔開始,到最終完成完整的程序。單片機(jī)型號(hào):STM32F070F6P6步驟如下:1、查看文檔《STM32F030x4/x6/x8/xC and STM32F070x6/xB advanced ARM?-based 32-bit MCUs》確認(rèn)其Flash的內(nèi)部結(jié)構(gòu)。2、查看文檔確認(rèn)STM32F070F6P6內(nèi)部存儲(chǔ)器地址分配。從下表中得到的主要...
路透社報(bào)道,泰國最大的移動(dòng)運(yùn)營商Advanced Info Service Pcl周二表示,華為是競標(biāo)建設(shè)其5G核心網(wǎng)絡(luò)的五家公司之一,該公司今年加大了投資。作為美國在亞洲最古老的盟友,泰國表示不會(huì)將中國供應(yīng)商排除在其5G基礎(chǔ)設(shè)施建設(shè)之外,但會(huì)對任何安全問題保持警惕。AIS已接近挑選供應(yīng)商的最后階段,這份名單包括愛立信、諾基亞、中興通訊、三星、華為。AIS總裁...
簡介:本文章主要介紹STM32F407和STM32F051主從I2C通信方法。M4作為主機(jī):int main(void){/* USER CODE BEGIN 1 *//* USER CODE END 1 */HAL_Init();/* Configure the system clock */SystemClock_Config();/* Initialize all configured peripherals */MX_GPIO_Init();MX_I2C1_Init();MX_USART1_UART_Init();/* USER CODE BEGIN...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved