本文講述移植STM32CubeMX生成的驅(qū)動程序到自己的項目中,以定時器為例。為什么要寫這篇文章呢?是因為定時器移植這件事情耗費了我整整2天的時間,只因為一個特殊的地方?jīng)]有注意到。把整個移植過程用文字記錄下來,以利于自身其它程序的移植,并對本文的讀者提供一些技術(shù)上的參考。
1、如果僅完成計時功能,在STM32CubeMX中設(shè)置比較簡單,如下圖所示,只需指定其時鐘源即可。
2、對時鐘進行進一步設(shè)置,這個在先前的日志中已經(jīng)描述過,將分頻系數(shù)與MCU的主頻系數(shù)設(shè)置成一致,例如我現(xiàn)在MCU的主頻是72M,則進行72分頻即可,這樣單位計數(shù)周期是1us,按照下圖所示,我在Counter Period中設(shè)置為1000,則定時器的中斷時間是1ms。
3、設(shè)置定時器中斷。
4、生成工程文件。
5、有了上述準備后,我們就可已將工程移植到自己的項目中了。
6、建立定時器相應(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ù)中的程序到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個文件進行設(shè)置,首先設(shè)置stm32f4xx_hal_conf.h文件,打開相應(yīng)的驅(qū)動模塊,如下所示。
/* ########################## 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);
至此,就完成了整個驅(qū)動程序的移植工作,我所忽略的地方就是stm32f4xx_it.h文件,必須在這個文件中添加相應(yīng)的中斷服務(wù)處理函數(shù),才能夠使startup_stm32f401xc.s文件中中斷向量與C文件中的中斷服務(wù)處理函數(shù)對應(yīng)上,否則中斷服務(wù)處理函數(shù)得不到調(diào)用。
上一篇:STM32F4 開發(fā)筆記8:解決USB CDC “該設(shè)備無法啟動”問題
下一篇:STM32F4 開發(fā)筆記6: LQFP64封裝引腳的兼容性
推薦閱讀
史海拾趣
由于“BESTECH”并非一個我所熟知的特定電子行業(yè)公司,因此我無法提供關(guān)于該公司具體發(fā)展故事的詳細信息。此外,每個公司的發(fā)展都涉及到許多復(fù)雜的事件和因素,包括市場變化、技術(shù)革新、競爭態(tài)勢、管理決策等,因此,撰寫五個關(guān)于該公司發(fā)展的故事將需要詳盡的研究和深入了解。
不過,我可以為您提供一個電子行業(yè)公司可能經(jīng)歷的一般性發(fā)展故事的框架,您可以根據(jù)這個框架來進一步了解或研究“BESTECH”或其他電子行業(yè)公司的發(fā)展歷程。
電子行業(yè)公司一般性發(fā)展故事框架:
- 創(chuàng)業(yè)初期與技術(shù)創(chuàng)新:
- 描述公司創(chuàng)始人的背景和對電子行業(yè)的熱情。
- 講述公司如何從一個創(chuàng)業(yè)想法開始,通過技術(shù)創(chuàng)新解決某個行業(yè)痛點或滿足市場需求。
- 強調(diào)早期產(chǎn)品的獨特性和市場接受度。
- 市場擴張與品牌建設(shè):
- 描述公司如何逐漸擴大市場份額,可能包括進入新的地域市場或拓展產(chǎn)品線。
- 講述公司在品牌建設(shè)方面的努力和成果,如參加行業(yè)展會、獲得獎項等。
- 分析公司在市場競爭中的優(yōu)勢和策略。
- 技術(shù)升級與研發(fā)投入:
- 強調(diào)公司如何緊跟行業(yè)技術(shù)發(fā)展趨勢,不斷升級產(chǎn)品和技術(shù)。
- 描述公司在研發(fā)方面的投入和取得的成果,如專利申請、新產(chǎn)品發(fā)布等。
- 分析技術(shù)升級對公司市場競爭力的影響。
- 合作與戰(zhàn)略聯(lián)盟:
- 講述公司如何與其他企業(yè)、研究機構(gòu)或高校建立合作關(guān)系,共同推進技術(shù)創(chuàng)新和市場拓展。
- 分析這些合作對公司發(fā)展的戰(zhàn)略意義和價值。
- 描述合作帶來的具體成果和效益。
- 企業(yè)文化與社會責任:
- 強調(diào)公司在企業(yè)文化建設(shè)方面的努力和特色,如員工培訓、激勵機制等。
- 講述公司如何履行社會責任,如環(huán)保措施、公益活動等。
- 分析企業(yè)文化和社會責任對公司長遠發(fā)展的重要性。
請注意,這只是一個框架性的描述,具體的故事內(nèi)容需要根據(jù)“BESTECH”或其他電子行業(yè)公司的實際情況來填充。如果您對“BESTECH”有特定的了解或需求,建議您查閱相關(guān)資料、公司年報或行業(yè)報告,以獲取更準確和詳細的信息。
在全球化的浪潮下,Eurohm Resistors公司積極拓展海外市場。公司深入分析了全球電子行業(yè)的發(fā)展趨勢和市場需求,制定了詳細的市場拓展計劃。通過與當?shù)睾献骰锇榈木o密合作,Eurohm Resistors成功打入了多個國家和地區(qū)的市場,實現(xiàn)了全球化布局。
近年來,帝特積極尋求與行業(yè)內(nèi)優(yōu)秀企業(yè)的合作機會。2024年3月,帝特科技與技象科技在廣州帝特總部簽署戰(zhàn)略合作框架協(xié)議,雙方就物聯(lián)網(wǎng)通信產(chǎn)品展開深入合作。這一合作不僅有助于帝特在物聯(lián)網(wǎng)領(lǐng)域的技術(shù)積累和業(yè)務(wù)拓展,也為公司未來的發(fā)展注入了新的活力。
隨著公司規(guī)模的擴大,C-TON意識到單憑自己的力量難以在競爭激烈的電子行業(yè)中立足。于是,公司開始積極尋求與其他企業(yè)的戰(zhàn)略合作。通過與一家知名的電子產(chǎn)品制造商建立合作伙伴關(guān)系,C-TON成功將其芯片技術(shù)應(yīng)用于對方的產(chǎn)品中,進一步擴大了市場份額。這一合作不僅提升了C-TON的知名度,也為其帶來了穩(wěn)定的訂單和收入來源。
在追求經(jīng)濟效益的同時,Crosspoint Solutions公司也積極履行社會責任。公司注重環(huán)保和可持續(xù)發(fā)展,在生產(chǎn)過程中采用環(huán)保材料和工藝,減少對環(huán)境的影響。此外,公司還積極參與社會公益活動,支持教育事業(yè)和扶貧工作。這些舉措不僅提升了公司的社會形象,也增強了員工和客戶的歸屬感。
請注意,這些故事是基于一般電子行業(yè)的發(fā)展情況虛構(gòu)的,并不代表Crosspoint Solutions公司的實際發(fā)展歷程。如果需要了解該公司的真實故事,建議查閱相關(guān)新聞報道、公司官網(wǎng)或行業(yè)分析報告等可靠來源。
屹晶微的創(chuàng)始人黃米龍,原本在發(fā)電廠從事電氣運營工作長達八年。這段經(jīng)歷讓他對電子領(lǐng)域有了深入的了解和濃厚的興趣。然而,他并沒有滿足于現(xiàn)狀,而是看到了中國芯片產(chǎn)業(yè)的巨大潛力和發(fā)展空間。于是,在2007年,他毅然決定從發(fā)電廠辭職,利用自己的積蓄和借來的資金,在臺州創(chuàng)立了屹晶微電子有限公司。
在創(chuàng)立初期,屹晶微面臨著資金短缺、技術(shù)落后和市場競爭激烈的困境。但黃米龍憑借對電子行業(yè)的深刻理解和堅定的信念,帶領(lǐng)團隊克服了種種困難。他們不斷引進先進技術(shù)和設(shè)備,加強研發(fā)力量,提升產(chǎn)品質(zhì)量。經(jīng)過幾年的努力,屹晶微逐漸在芯片設(shè)計領(lǐng)域嶄露頭角,并成功推出了多款具有自主知識產(chǎn)權(quán)的芯片產(chǎn)品。
根據(jù)測試測量世界tmworld與Frost & Sullivan的聯(lián)合調(diào)查,全球通用儀器市場的大部分份額仍然由示波器、頻譜分析儀、信號發(fā)生器、萬用表四種儀器把持。如圖(1)所示四種儀器所占份額依次為33.7%,17.3%,16.3%,13.1%。個人認為,頻譜分析儀之所以會 ...… 查看全部問答∨ |
TFTP: Desktop losing ACK, block number =3(無法傳輸nk) pb通過以太網(wǎng)無法傳輸nk,串口調(diào)試信息 TFTP: Desktop losing ACK, block number = 3 ...… 查看全部問答∨ |
DM365DVR上TD模塊(LC6311)的網(wǎng)速測試的疑問 我的開發(fā)平臺是DM365DVR,通過USB方式將TD模塊(LC6311)連接到DM365DVR上,正確配置后,能夠成功撥號,也能夠通過TD網(wǎng)絡(luò)傳輸視頻,但是傳輸效果極差。CIF(352*288)格式的視頻每秒只能傳輸一到兩幀,而且畫面質(zhì)量也不好。更可氣的是傳不幾秒就斷 ...… 查看全部問答∨ |
|
具體事情如下: 傳感器測一個力,送到“TR700數(shù)字式重量變送器”上顯示。現(xiàn)在從“TR700數(shù)字式重量變送器”上接出的一個RS232接到電腦上,需要做的是在電腦上采集傳感器測得的數(shù)據(jù)并存儲下來。 從來沒做過這方面的工作,在網(wǎng)上查了一下還是毫無頭 ...… 查看全部問答∨ |
GPRS模塊做數(shù)據(jù)傳輸時用SIM公司的那個SERVER.EXE軟件來和GPRS交互數(shù)據(jù)。主機是ADSL撥號上網(wǎng),用ipconfig查了一下有兩個地址,一個是寬帶地址一個是本地地址。把SERVER軟件打開發(fā)現(xiàn)它上面的IP地址是本地地址,端口是2020這該怎么辦啊 我怎么樣才能 ...… 查看全部問答∨ |
開發(fā)的硬件是mips架構(gòu)的CPU~ 郁悶了~在dos下編bootrom.bin,燒進flash后通過點燈觀察運行狀況 在romStart函數(shù)中復(fù)制rom代碼到ram已經(jīng)沒問題,之后可以成功調(diào)用rom中的點燈程序或者已經(jīng)復(fù)制到ram中的點燈程序拷貝。 但是解壓縮就是過不去~ 想問 ...… 查看全部問答∨ |
設(shè)計資源 培訓 開發(fā)板 精華推薦
- 無人飛行器機載穩(wěn)定云臺控制系統(tǒng)的設(shè)計
- 匠芯創(chuàng)推出面向具身智能高性能實時處理器M7000
- 基于HW2181B的航模無線遙控通信系統(tǒng)設(shè)計與實現(xiàn)
- 應(yīng)對機器人“四高”,極海推出全球首款雙核Cortex-M52 MCU G32R501
- 非道路移動機械透射式煙度計研究與實現(xiàn)
- 基于STM32F103的角磨機開關(guān)磁阻電機控制器的設(shè)計
- 基于Cortex-M0智能水溫監(jiān)控系統(tǒng)的優(yōu)化
- STM32 printf重定向(串口輸出)
- 基于STM32H743的仿真轉(zhuǎn)臺控制器設(shè)計
- 車載系統(tǒng)中,交互設(shè)計的三秒原則是什么?
- 快速、高精度電池管理系統(tǒng)助力更安全的電動汽車
- 德國推出自動駕駛倫理道德標準 屬世界首個
- 汽車應(yīng)用AI等技術(shù)或存安全漏洞 寶馬召回問題車輛引深思
- 地平線公司發(fā)布新一代自動駕駛處理器征程2.0架構(gòu)
- 馬斯克表示SpaceX星際飛船在2019年3/4月進行試飛,能成功嗎?
- 麥肯錫預(yù)測2030:1億中國人面臨職業(yè)轉(zhuǎn)換 全球8億人被機器人取代
- 2018年中國機器人市場:國產(chǎn)機器人占比不斷擴大 外企持續(xù)加大產(chǎn)量
- 哈工智能擬出資1.4億元參設(shè)合資公司 強化工業(yè)機器人本體領(lǐng)域布局
- 中國機器人產(chǎn)業(yè)將迎來“黃金十年”