電子時(shí)代,硬件在突飛猛進(jìn)的發(fā)展,頻率不斷上升,目前的STM32系列,Cortex M系列,Cortex-M4的頻率已經(jīng)為:180MHz了,基本上與之前的ARM7/9頻率差不多了,還有Cortex-M7,頻率更高,出現(xiàn)了BGA封裝與SDRAM DDR等??磥?a href="http://m.weightgang.cn/zhuanti/W1ibjL" style="color:#4595e6;" target="_blank">處理器越來越大眾化了,物聯(lián)網(wǎng)上的電子設(shè)備聯(lián)網(wǎng),也越來越普及了,硬件成本不斷降低是大勢(shì)所趨,因此,作為一個(gè)電子設(shè)計(jì)人員,還是要不斷的學(xué)習(xí)掌握更多的技術(shù)知識(shí)與基礎(chǔ),從而不會(huì)被社會(huì)很快淘汰。
最近買了一個(gè)現(xiàn)成的STM32F429 Discovery 的開發(fā)板,想嘗試一下較大點(diǎn)的嵌入式操作系統(tǒng)如RTEMS的移植與應(yīng)用。因?yàn)橛辛薙TM32F103/107的基礎(chǔ),熟悉了硬件與固件庫,STM32F429其實(shí)很容易入手。下面就先定時(shí)器中斷點(diǎn)個(gè)LED試下吧,主要是要組織好工程目錄。
我是根據(jù)之前一直使用STM32F103的工程目錄改了一下,使用STM32F4XX的最新固件庫V1.6.1,至于為何不去直接操作寄存器,我想,雖然自己是硬件出身,搞寄存器更深入的了解處理器,但是,畢竟寄存器過多,有了庫,可以封裝一下,這樣更可以快速的上手。如果需要查看寄存器,也是可以查的。用固件庫可以少一些錯(cuò)誤,畢竟我們是做應(yīng)用的,首先要學(xué)會(huì)使用CPU來實(shí)現(xiàn)我們要的功能。
工程目錄如下:這里使用最新的Keil MDK V5.17版本的,STM32F4XX的器件庫等還需要進(jìn)一步下載。這里使用的是自帶的ST-Link下載程序,當(dāng)然使用Jlink也是可以的。
STM32F429的系統(tǒng)定時(shí)器,原來是系統(tǒng)時(shí)鐘180MHz的8分頻,這個(gè)可以看一下STM32F4XX的參考手冊(cè),里面時(shí)鐘RCC部分的框架介紹。我這里為了定時(shí)為1S,因此計(jì)算了一下。
以下為Tim2.c的主程序。Tim2.h 只是函數(shù)聲明。
/******************** (C) COPYRIGHT 2016 **************************
* 文件名 :Tim2.c
* 描述 :定時(shí)器timer2 測(cè)試?yán)?nbsp;
* 實(shí)驗(yàn)平臺(tái):STM32F429ZIT6
* 庫版本 :V1.6.1
*
* 編寫日期:2016-05-02
* 修改日期:
* 作者 :
****************************************************************************/
#include "Tim2.h"
/*
* 函數(shù)名:TIM2_NVIC_Configuration
* 描述 :TIM2中斷優(yōu)先級(jí)配置
* 輸入 :無
* 輸出 :無
*/
void TIM2_NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*TIM_Period--1000 TIM_Prescaler--(22500-1) -->中斷周期為
((1/180000000)*8)*22500*1000=1S 1秒定時(shí)器 */
void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period=1000; /* 自動(dòng)重裝載寄存器周期的值(計(jì)數(shù)值) */
/* 累計(jì) TIM_Period個(gè)頻率后產(chǎn)生一個(gè)更新或者中斷 */
TIM_TimeBaseStructure.TIM_Prescaler= (22500 - 1); /* 時(shí)鐘預(yù)分頻數(shù) (180M/8)/22500 */
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 采樣分頻 */
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上計(jì)數(shù)模式 */
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIM2, TIM_FLAG_Update); /* 清除溢出中斷標(biāo)志 */
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2, ENABLE); /* 開啟時(shí)鐘 */
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , DISABLE); /* 先關(guān)閉等待使用 */
}
/*
* 函數(shù)名:TIM2_Config
* 描述 :TIM2配置
* 輸入 :無
* 輸出 :無
*/
void TIM2_Config(void)
{
TIM2_Configuration();
TIM2_NVIC_Configuration();
}
/******************* (C) COPYRIGHT 2016 *END OF FILE************/
以下為:led.c的文件。
/******************** (C) COPYRIGHT 2014 ***************************
* 文件名 :led.c
* 描述 :led 應(yīng)用函數(shù)庫
* 實(shí)驗(yàn)平臺(tái):
* 硬件連接:-----------------------
* | PG14 - LED1(RUN) |
* -----------------------
* 庫版本 :ST3.5.0
* 編寫日期:2014-11-04
* 修改日期:
* 作者 :
****************************************************************************/
#include "led.h"
/*
* 函數(shù)名:LED_GPIO_Config
* 描述 :配置LED用到的I/O口
* 輸入 :無
* 輸出 :無
*/
void LED_GPIO_Config(void)
{
/*定義一個(gè)GPIO_InitTypeDef類型的結(jié)構(gòu)體*/
GPIO_InitTypeDef GPIO_InitStructure;
/*開啟 LED1 的GPIOx的外設(shè)時(shí)鐘*/
RCC_AHB1PeriphClockCmd( RCC_LED1, ENABLE);
/*選擇要控制的LED1 GPIOx引腳*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_LED1;
/*設(shè)置引腳模式為通用推挽輸出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
/*設(shè)置引腳速率為50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
/* 設(shè)置為推挽輸出模式 */
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
/* 設(shè)置為上拉 */
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_UP;
/*調(diào)用庫函數(shù),初始化LED1 的GPIOx*/
GPIO_Init(GPIO_LED1_PORT, &GPIO_InitStructure);
/*開啟 LED2 的GPIOx的外設(shè)時(shí)鐘*/
RCC_AHB1PeriphClockCmd( RCC_LED2, ENABLE);
/*選擇要控制的LED2 GPIOx引腳*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_LED2;
/*設(shè)置引腳模式為通用推挽輸出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
/*設(shè)置引腳速率為50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
/* 設(shè)置為推挽輸出模式 */
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
/* 設(shè)置為上拉 */
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_UP;
/*調(diào)用庫函數(shù),初始化LED1 的GPIOx*/
GPIO_Init(GPIO_LED2_PORT, &GPIO_InitStructure);
/* 關(guān)閉LED1 */
//GPIO_ResetBits(GPIO_LED1_PORT, GPIO_Pin_LED1);
//GPIO_ResetBits(GPIO_LED2_PORT, GPIO_Pin_LED2);
}
/******************* (C) COPYRIGHT 2014 *****END OF FILE************/
以下為L(zhǎng)ED的引腳定義:led.h
/******************** (C) COPYRIGHT 2014 ***************************
* 文件名 :led.h
* 描述 :led 應(yīng)用函數(shù)庫
* 實(shí)驗(yàn)平臺(tái):
* 硬件連接:-----------------------
* | PG14 - LED1(RUN) |
* -----------------------
* 庫版本 :V1.6.1
* 編寫日期:2016-04-30
* 修改日期:
* 作者 :
****************************************************************************/
#ifndef __LED_H
#define __LED_H
#include "stm32f4xx.h"
/* the macro definition to trigger the led on or off
* 1 - off
- 0 - on
*/
#define ON 1
#define OFF 0
#define RCC_LED1 RCC_AHB1Periph_GPIOG
#define GPIO_LED1_PORT GPIOG
#define GPIO_Pin_LED1 GPIO_Pin_13
#define RCC_LED2 RCC_AHB1Periph_GPIOG
#define GPIO_LED2_PORT GPIOG
#define GPIO_Pin_LED2 GPIO_Pin_14
//帶參宏,可以像內(nèi)聯(lián)函數(shù)一樣使用
#define LED1(a) if (a)
GPIO_SetBits(GPIO_LED1_PORT,GPIO_Pin_LED1);
else
GPIO_ResetBits(GPIO_LED1_PORT,GPIO_Pin_LED1)
#define LED2(a) if (a)
GPIO_SetBits(GPIO_LED2_PORT,GPIO_Pin_LED2);
else
GPIO_ResetBits(GPIO_LED2_PORT,GPIO_Pin_LED2)
void LED_GPIO_Config(void);
#endif /* __LED_H */
主程序:硬件的初始化。
/******************** (C) COPYRIGHT 2016 **************************
* 文件名 :main.c
* 描述 :STM32F429 LED測(cè)試
* 實(shí)驗(yàn)平臺(tái): STM32F429ZIT6
* 庫版本 :V1.6.1
* 編寫日期:2016-05-02
* 修改日期:
* 作者 :
**********************************************************************************/
#include "stm32f4xx.h"
//#include "usart1.h"
#include "led.h"
#include "Tim2.h"
void Delay(__IO uint32_t nTime)
{
while(--nTime != 0);
}
/*
* 函數(shù)名:main
* 描述 : "主機(jī)"的主函數(shù)
* 輸入 :無
* 輸出 : 無
*/
int main(void)
{
LED_GPIO_Config();
TIM2_Config();
LED1(ON);
LED2(ON);
while(1)
{
#if 0
Delay(0x2FFFFF);
LED1(OFF);
LED2(OFF);
Delay(0x2FFFFF);
LED1(ON);
LED2(ON);
#endif
}
}
/******************* (C) COPYRIGHT 2014 *****END OF FILE************/
以下為真正的實(shí)現(xiàn)函數(shù):定時(shí)器2中斷函數(shù) stm32f4xx_it.c
/**
* @brief This function handles TIM2 Handler.
* @param None
* @retval None
*/
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
{
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);
GPIO_WriteBit(GPIO_LED1_PORT,GPIO_Pin_LED1,
(BitAction)(1-GPIO_ReadOutputDataBit(GPIO_LED1_PORT,GPIO_Pin_LED1)));
}
}
編譯并燒寫,基本上可以看到LED 1S的亮,1S的滅,然后不斷的循環(huán)下去,一般用于程序的運(yùn)行指示燈。
重要的總結(jié):
(1)GPIO的時(shí)鐘,STM32F103的是APB時(shí)鐘,STM32F429為:RCC_AHB1PeriphClockCmd,我開始弄錯(cuò)了,程序不運(yùn)行?。?p>
(2)STM32F429雖然180MHz的主頻,但是系統(tǒng)定時(shí)器的時(shí)鐘為其的8分頻,STM32F103是直接使用的72MHz的主頻,因此在計(jì)算分頻與周期數(shù)時(shí),要使用180MHz/8 的定時(shí)器基本時(shí)鐘去計(jì)算。
上一篇:STM32F4xx定時(shí)器
下一篇:stm32f407之基本定時(shí)器TIM6&TIM7(操作寄存器)
推薦閱讀
史海拾趣
GigPeak公司自成立之初,便專注于高速數(shù)據(jù)傳輸技術(shù)的研發(fā)。在2005年,公司研發(fā)團(tuán)隊(duì)成功開發(fā)出一種新型的光電轉(zhuǎn)換器,該轉(zhuǎn)換器能夠在極低的功耗下實(shí)現(xiàn)前所未有的數(shù)據(jù)傳輸速率。這一技術(shù)創(chuàng)新迅速吸引了業(yè)界的關(guān)注,并成功應(yīng)用于多個(gè)高端數(shù)據(jù)中心項(xiàng)目,幫助GigPeak在競(jìng)爭(zhēng)激烈的市場(chǎng)中脫穎而出。隨著技術(shù)的不斷迭代和市場(chǎng)的廣泛認(rèn)可,GigPeak逐漸成為了高速數(shù)據(jù)傳輸領(lǐng)域的領(lǐng)軍企業(yè)。
CP Technology Inc成立之初,便專注于半導(dǎo)體技術(shù)的研發(fā)。公司研發(fā)團(tuán)隊(duì)成功開發(fā)出一種高效能、低功耗的芯片,這一創(chuàng)新為公司的快速崛起奠定了基石。隨著技術(shù)的不斷完善和產(chǎn)品的廣泛應(yīng)用,CP Technology Inc逐漸在半導(dǎo)體市場(chǎng)上占據(jù)了一席之地。公司通過持續(xù)的技術(shù)創(chuàng)新和產(chǎn)品迭代,不斷滿足市場(chǎng)需求,贏得了客戶的信賴和支持。
隨著公司規(guī)模的擴(kuò)大和產(chǎn)品種類的增多,AEP公司意識(shí)到質(zhì)量管理的重要性。公司引進(jìn)了一套先進(jìn)的質(zhì)量管理體系,從原材料采購、生產(chǎn)過程到產(chǎn)品出廠,每一個(gè)環(huán)節(jié)都進(jìn)行嚴(yán)格的質(zhì)量控制。同時(shí),公司還加強(qiáng)了對(duì)員工的培訓(xùn)和管理,確保每一名員工都能嚴(yán)格按照質(zhì)量標(biāo)準(zhǔn)進(jìn)行操作。這一舉措大大提高了AEP公司的產(chǎn)品質(zhì)量和客戶滿意度,為公司的長(zhǎng)期發(fā)展奠定了堅(jiān)實(shí)基礎(chǔ)。
Focus科技股份有限公司(虛構(gòu))在深耕外貿(mào)電商領(lǐng)域的同時(shí),也敏銳地捕捉到了教育與醫(yī)療行業(yè)的數(shù)字化轉(zhuǎn)型機(jī)遇。公司利用自身在互聯(lián)網(wǎng)技術(shù)和大數(shù)據(jù)分析方面的優(yōu)勢(shì),研發(fā)了智慧教育平臺(tái)和移動(dòng)醫(yī)療應(yīng)用。智慧教育平臺(tái)通過提供個(gè)性化學(xué)習(xí)資源和在線互動(dòng)教學(xué)服務(wù),有效提升了教育資源的利用率和學(xué)生的學(xué)習(xí)效果;移動(dòng)醫(yī)療應(yīng)用則通過遠(yuǎn)程醫(yī)療咨詢、健康管理等功能,為用戶提供了便捷的醫(yī)療服務(wù)體驗(yàn)。這些跨界融合的產(chǎn)品不僅豐富了公司的業(yè)務(wù)線,也進(jìn)一步提升了公司的品牌影響力和市場(chǎng)競(jìng)爭(zhēng)力。
在電子行業(yè)的激烈競(jìng)爭(zhēng)中,Bomar Interconnect公司憑借持續(xù)的技術(shù)創(chuàng)新,逐漸嶄露頭角。公司研發(fā)團(tuán)隊(duì)不斷深入研究新型連接技術(shù),成功推出了一系列高性能、高可靠性的連接器產(chǎn)品。這些產(chǎn)品在市場(chǎng)上獲得了廣泛認(rèn)可,為公司帶來了穩(wěn)定的收入來源。同時(shí),公司還積極投入資源,加強(qiáng)與其他企業(yè)的技術(shù)合作,不斷拓寬產(chǎn)品應(yīng)用領(lǐng)域,進(jìn)一步提升了公司的市場(chǎng)競(jìng)爭(zhēng)力。
給UPS電源配備一臺(tái)理想的適用的穩(wěn)壓電源需注意以下幾個(gè)方面: (1).穩(wěn)壓電源必須提供可靠的市電過壓輸入保護(hù)功能。除參數(shù)穩(wěn)壓器在極限工作條件下,可在市電輸入電壓高達(dá)300V時(shí)長(zhǎng)期向負(fù)載提供220V穩(wěn)壓電源外,其它幾種交流穩(wěn)壓電源所允許的市電上限都 ...… 查看全部問答∨ |
wince內(nèi)核調(diào)用API函數(shù)出問題 在kernel里面調(diào)用API函數(shù)都會(huì)出現(xiàn)連接錯(cuò)誤,請(qǐng)問高手如何解決? hal.lib(cfw.obj) : error LNK2019: unresolved external symbol MapViewOfFile referenced in function OEMInit hal.lib(cfw.obj) : error LNK2019: unresolved external symbol Cr ...… 查看全部問答∨ |
看到書上說 64位機(jī)的內(nèi)存就可以認(rèn)為是無限的(科學(xué)家估計(jì)已知的宇宙有2的70多次的粒子),但64的意思應(yīng)該是說有64個(gè)位吧,但這和內(nèi)存是怎么產(chǎn)生關(guān)系的?看到書上知道64個(gè)位有64個(gè)數(shù)據(jù)線,可是地址線和位數(shù)的關(guān)系就不明顯了,一個(gè)地址用 ...… 查看全部問答∨ |
全新 C2000™ F2833x 教學(xué) ROM 現(xiàn)已推出 全新 C2000™ F2833x 教學(xué) ROM 現(xiàn)已推出 全新 C2000 F2833x 教學(xué) ROM 是一款綜合指南,旨在向新用戶介紹關(guān)于 C2000 與 F2833x 器件的全部知識(shí)。該教學(xué) ROM 的內(nèi)容結(jié)構(gòu)類似于本科生教材,針對(duì)自學(xué)和輔導(dǎo)教學(xué)進(jìn)行了精心設(shè)計(jì)。 ...… 查看全部問答∨ |
用兩塊開發(fā)板下的can程序,之間能通信,現(xiàn)在我拿了另外自己設(shè)計(jì)的一塊板,這塊板只要收到can發(fā)送的信號(hào)就會(huì)有反應(yīng),那么原來的開發(fā)板只是發(fā)送CAN信號(hào)就可以,那么我除了修改發(fā)送的ID號(hào)以外,還應(yīng)該修改什么嗎,有什么需要注意的嗎?謝謝啦… 查看全部問答∨ |
PCB封裝導(dǎo)入3D模型時(shí)候如何有快捷鍵使其很好的對(duì)應(yīng)? 就比如如下圖。本來可以自己拖動(dòng)3D 圖形。放入其自己感覺合適的位置就行。但是總有些誤差。有沒有快捷鍵或者對(duì)應(yīng)的腳快速對(duì)應(yīng)的?… 查看全部問答∨ |
BB Black 體驗(yàn)結(jié)尾 安裝debian系統(tǒng) 繼之前三篇體驗(yàn)心得 BB Black初體驗(yàn)一 BB Black初體驗(yàn)二 BB Black初體驗(yàn)三 今天花了一整天終于解決把μSD中的debian系統(tǒng)給跑起來了。十分開心,跟大家分享下。 首先,要說明下子,一是μSD卡中運(yùn)行debian,而不是燒寫到eMMC中,珍愛板子,少擦 ...… 查看全部問答∨ |
TMS320F28335項(xiàng)目開發(fā)記錄8_28335之GPIO引腳 GPIO(General-Purpose Input/Output)——通用輸入/輸出口; DSP28335 GPIO模塊分為三類IO口:PORTA(0-31),PORTB(32-63),PORTC(64-87) 對(duì)GPIO模塊的設(shè)置主要通過三類寄存器來完成,分別是:控制寄存器、數(shù)據(jù)寄存器、 ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- stm32與Arduino的比較
- STM32H503開發(fā)(2)----STM32CubeProgrammer燒錄
- STM32簡(jiǎn)介 STM32和ARM7的關(guān)系
- stm32屬于arm嗎_arm和stm32的區(qū)別
- STM32調(diào)試神器STM32CubeMonitor介紹
- 基于通過寄存器和調(diào)用庫函數(shù)的方式,對(duì)比測(cè)試STM32讀寫IO時(shí)間
- 基于STM32單片機(jī)通過使用宏assert_param來實(shí)現(xiàn)運(yùn)行時(shí)間檢測(cè)
- 基于stm32單片機(jī)利用通用定時(shí)器輸出PWM
- 工程師STM32單片機(jī)學(xué)習(xí)基礎(chǔ)手記(4):用PWM實(shí)現(xiàn)熒火蟲燈
- 激光雷達(dá)最重要的參數(shù):信噪比
- 十字路口的“金屬休克”:盤點(diǎn)那些智駕系統(tǒng)很難替代人類駕駛員的場(chǎng)景
- IP智能家居控制系統(tǒng)
- 鋰離子電池充電電路設(shè)計(jì)
- 手機(jī)中音頻系統(tǒng)抗ESD和EMI干擾設(shè)計(jì)
- 北航吳江浩教授團(tuán)隊(duì)研發(fā)的首個(gè)具備自主懸停能力的仿蜂鳥微型飛行器
- 基于VMR6512的無線音頻轉(zhuǎn)發(fā)器設(shè)計(jì)
- CS7123在電視盒中的應(yīng)用
- AiMOGA墨甲機(jī)器人驚艷亮相印尼車展,加速東南亞智能銷售布局
- LED閃光燈驅(qū)動(dòng)芯片在照相手機(jī)中的應(yīng)用
- 有獎(jiǎng)直播:聯(lián)詠安防監(jiān)控方案及未來技術(shù)方向 報(bào)名開始啦!
- 留下你的點(diǎn)評(píng),是德科技信號(hào)分析儀,精美禮品等你拿!
- 有獎(jiǎng)?wù){(diào)查——We want you!好的參考設(shè)計(jì)網(wǎng)站什么樣?
- 話說我接觸的ADI實(shí)驗(yàn)室電路“評(píng)估板”
- 有獎(jiǎng)直播:安森美光伏和儲(chǔ)能產(chǎn)品介紹
- MPS 送福利 | 商城上線送單,送京東卡,8000元好禮等你拿!
- EEWORLD 示波器問卷有獎(jiǎng)大調(diào)查
- stm32 NRF24L01
- stm32 ssD1306 OLED驅(qū)動(dòng)架構(gòu)
- stm32f0 TIM1實(shí)現(xiàn)輸出PWM波形
- 室內(nèi)配送機(jī)器人盤點(diǎn) | 智能時(shí)代的“跑腿小哥”
- 與并聯(lián)機(jī)器人畫上等號(hào),阿童木完成數(shù)千萬B2輪融資
- AR/VR或成為今年投融資重點(diǎn) 產(chǎn)業(yè)鏈廠商脫穎而出靠什么?
- 半導(dǎo)體分銷商雅創(chuàng)電子創(chuàng)業(yè)板IPO成功過會(huì)了
- 基帶芯片提供商中科晶上終止了科創(chuàng)板IPO
- 中京電子:公司訂單比較飽滿 HDI/FPC產(chǎn)品訂單排滿
- 羅永浩這樣回應(yīng)堅(jiān)果手機(jī)轉(zhuǎn)戰(zhàn)教育硬件