娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月29日(星期四)

2019年05月29日 | 使用TIM1產生1秒定時控制數碼管顯示0-9(STM32_10)

發布者:RadiantGlow 來源: eefocus關鍵字:TIM1  定時控制  數碼管顯示 手機看文章 掃描二維碼
隨時隨地手機看文章

一、項目配置


1、新建項目文件夾"TimSeg";


2、通過Keil5創建新項目,保存在所創建的文件夾中(設項目名為pTimSeg),選擇MCU芯片為"STM32F103ZE"(本程序使用的硬件為:STM32-PZ6806L開發板


3、在"TimSeg"文件夾下新建"CMSIS"、"Device"、"Public"、"Startup"、"User"和"Lib"文件夾。


① 在"CMSIS"文件夾中復制"core_cm3.h"和"core_cm3.c"文件;


② 在" Device "文件夾中復制"stm32f10x.h"、"system_stm32f10x.h"和"system_stm32f10x.c"文件;


③ 在" Startup "文件夾中復制"startup_stm32f10x_hd.s"文件;


④在"Lib"文件夾中新建"inc"和"src"兩個子文件夾,在"inc"文件夾中復制"misc.h"、"stm32f10x_gpio.h"、"stm32f10x_tim.h"和"stm32f10x_rcc.h"文件;在"src"文件夾中復制"misc.c"、"stm32f10x_gpio.c"、"stm32f10x_tim.c"和"stm32f10x_rcc.c"文件;


4、為項目添加"CMSIS"、"Device"、"Public"、"Startup"、"User"和"Lib"組,并將上述C程序文件和"startup_stm32f10x_hd.s"啟動文件加入到相應組中。


5、打開“項目配置”對話框,在"Output"選項卡中選擇"Create HEX File",在"C/C++"選項卡中的"Include Paths"中添加如下包含路徑:".CMSIS;", ".Device;", ".Libinc;",".Public;"。


6、在"stm32f10x.h"中添加函數參數檢查宏


(參看:https://blog.csdn.net/fanxp66/article/details/80215090)


#ifdef  USE_FULL_ASSERT


/**


  * @brief  這個assert_param宏用于函數參數檢查


  * @param  expr:如果expr是 false,就調用 assert_failed函數報告源文件名和


  *         失敗的行號,如果expr是 true ,就返回一個空值


  * @retval None


  */


  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))


/* Exported functions ------------------------------------------------------- */


  void assert_failed(uint8_t* file, uint32_t line);


#else


  #define assert_param(expr) ((void)0)


#endif /* USE_FULL_ASSERT */


7、新建一個文件(system.h),保存到"Public"文件夾中,內容為:


#ifndef __SYSTEM__H


#define __SYSTEM__H


#include "stm32f10x.h"


//定義位帶地址宏


#define BITBAND(addr,bitnum) ((addr&0xF0000000) + 0x02000000 + ((addr&0x000FFFFF)<<5) + (bitnum<<2))


#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))


#define BIT_ADDR(addr,bitnum) MEM_ADDR(BITBAND(addr,bitnum))


//IO口地址映射


//數據輸出寄存器地址


#define GPIOA_ODR_Addr          (GPIOA_BASE + 12)


#define GPIOB_ODR_Addr (GPIOB_BASE + 12)


#define GPIOC_ODR_Addr (GPIOC_BASE + 12)


#define GPIOD_ODR_Addr          (GPIOD_BASE + 12)


#define GPIOE_ODR_Addr (GPIOE_BASE + 12)


#define GPIOF_ODR_Addr (GPIOF_BASE + 12)


#define GPIOG_ODR_Addr          (GPIOG_BASE + 12)


//數據輸入寄存器地址


#define GPIOA_IDR_Addr  (GPIOA_BASE + 12)


#define GPIOB_IDR_Addr  (GPIOB_BASE + 12)


#define GPIOC_IDR_Addr  (GPIOC_BASE + 12)


#define GPIOD_IDR_Addr  (GPIOD_BASE + 12)


#define GPIOE_IDR_Addr   (GPIOE_BASE + 12)


#define GPIOF_IDR_Addr   (GPIOF_BASE + 12)


#define GPIOG_IDR_Addr  (GPIOG_BASE + 12)


#endif


該文件定義了GPIO端口位帶操作的宏。


 


二、數碼管電路與使用配置


    開發板上數碼管相關電路如下圖所示:


   要使得數碼管正常顯示需要進過以下步驟:


1、使能GPIOC時鐘


2、配置GPIOC_0-GPIOC_7為推挽輸出,50MHz速度


3、通過庫函數操作控制輸出


4、實現過程


① 在上述配置的項目中添加"seg.h"和"seg.c"文件,保存在"User/Seg"文件夾下,"seg.h"文件的內容為:


#ifndef __SEG__H


#define __SEG__H


#include "system.h"


#include "stm32f10x_gpio.h"


#define SEGPORT GPIOC


#define SEG_RCCPORT RCC_APB2Periph_GPIOC


#define SEGPIN (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)


void Seg_Init(void);


#endif


"seg.c"文件的內容為:


#include "seg.h"


#include "stm32f10x_rcc.h"


void Seg_Init()


{


         GPIO_InitTypeDef GPIOC_mode;


         RCC_APB2PeriphClockCmd(SEG_RCCPORT, ENABLE);


         GPIOC_mode.GPIO_Pin = SEGPIN;


         GPIOC_mode.GPIO_Speed = GPIO_Speed_50MHz;


         GPIOC_mode.GPIO_Mode = GPIO_Mode_Out_PP;


         GPIO_Init(SEGPORT, &GPIOC_mode);


}


 


void Show()


{


         static u8 n=0;


         u16 seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};


         GPIO_Write(SEGPORT, seg[n]);


         n++;


         n = n%10;


}


② 將"seg.c"文件添加到項目的"User"組中;


③ 將"./User/Seg"路徑添加到項目文件包含的配置路徑中(在"C/C++"選項卡中的"Include Paths"中)。


三、定時器TIM1配置

1、選擇定時器


使用定時器首先要選擇定時器,stm32f103zet6MCU芯片有8個定時器,其中TIM1和TIM8稱為高級定時器,TIM2-TIM5稱為通用定時器,TIM6和TIM7稱為基本定時器,這里選擇TIM1作為通用定時器功能使用。


2、計算定時器配置參數


在本程序中,想要通過TIM1進行1秒的定時,實現每秒鐘產生一次定時計數溢出中斷,然后在中斷函數中調用數碼管顯示輸出。由于系統初始化時鐘(調用SystemInit函數)后APB2總線上的時鐘為72MHz,本程序中TIM1的時鐘選擇為CK_INT,為72MHz,這個頻率進過預分頻和計數后得到1秒的定時,需要設置預分頻系數與定時計數值之積為72M,這里設置預分頻系數為7200,計數器計數值為10000。


3、計數器配置編程


① 使能TIM1時鐘


RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE );


② 配置TIM1參數


typedef struct


{


  uint16_t TIM_Prescaler;         /*預分頻系數. 取值0x0000-0xFFFF */


  uint16_t TIM_CounterMode;       /*計數模式*/


  uint16_t TIM_Period;            /*計數值 0x0000到 0xFFFF.  */


  uint16_t TIM_ClockDivision;     /*!時鐘分割,用于數字濾波器*/


  uint8_t TIM_RepetitionCounter;  /*重復次數,僅對TIM1和TIM8有意義.


} TIM_TimeBaseInitTypeDef;      


計數模式定義:


#define TIM_CounterMode_Up                 ((uint16_t)0x0000)


#define TIM_CounterMode_Down               ((uint16_t)0x0010)


#define TIM_CounterMode_CenterAligned1     ((uint16_t)0x0020)


#define TIM_CounterMode_CenterAligned2     ((uint16_t)0x0040)


#define TIM_CounterMode_CenterAligned3     ((uint16_t)0x0060)


時鐘分割


#define TIM_CKD_DIV1                       ((uint16_t)0x0000)


#define TIM_CKD_DIV2                       ((uint16_t)0x0100)


#define TIM_CKD_DIV4                       ((uint16_t)0x0200)


程序如下:


TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;      //定義配置結構體變量


TIM_TimeBaseStructure.TIM_Prescaler = (7200– 1);


TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;


TIM_TimeBaseStructure.TIM_Period = (10000 –1);


TIM_TimeBaseStructure.TIM_ClockDivision =0;


TIM_TimeBaseStructure.TIM_RepetitionCounter= 0;


TIM_TimeBaseInit( TIM1,&TIM_TimeBaseStructure);


③ 設置定時器中斷類型,并使能。


TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);


④ 開啟計數器,開始計數


TIM_Cmd( TIM1, ENABLE);


4、實現步驟


① 在上述配置的項目中添加"tim.h"和"tim.c"文件,保存在"User/Tim"文件夾下,"tim.h"文件的內容為:


#ifndef __TIM__H


#define __TIM__H


#include "system.h"


#include "stm32f10x_rcc.h"


#include "stm32f10x_tim.h"


void Init_Tim(void);


#endif


"tim.c"文件內容為:


#include "tim.h"


void Tim_Init(void)


{


         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;     //定義配置結構體變量


         RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1, ENABLE );//使能定時器TIM1時鐘


         TIM_TimeBaseStructure.TIM_Prescaler = (7200-1);


         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;


         TIM_TimeBaseStructure.TIM_Period = (10000-1);


         TIM_TimeBaseStructure.TIM_ClockDivision = 0;


         TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;


         TIM_TimeBaseInit( TIM1, &TIM_TimeBaseStructure);


         TIM_ClearITPendingBit(TIM1,TIM_IT_Update);//清除TIM1溢出中斷標志


         TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);//打開溢出中斷


         TIM_Cmd( TIM1, ENABLE);       //啟動定時器


}


② 將"tim.c"文件添加到項目的"User"組中;


③ 將"./User/Tim"路徑添加到項目文件包含的配置路徑中(在"C/C++"選項卡中的"Include Paths"中)。


 


四、NVIC配置和中斷函數


1、配置中斷分組(NVIC)


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);


2、使能中斷


NVIC_InitTypeDef NVIC_InitStructure;


NVIC_InitStructure.NVIC_IRQChannel =TIM1_UP_IRQn;     //定時器1上溢中斷


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;       //主優先級


NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;


NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;


NVIC_Init( & NVIC_InitStructure);


3、實現步驟


① 在上述配置的項目中添加"nvic.h"和"nvic.c"文件,保存在"User/Nvic"文件夾下,"nvic.h"文件的內容為:


#ifndef __NVIC__H


#define __NVIC__H


#include "stm32f10x.h"


#include "misc.h"


void My_NVIC_Init(void);


#endif


"nvic.c"文件內容為:


#include "nvic.h"


void My_NVIC_Init(void)


{


         NVIC_InitTypeDef NVIC_InitStructure;


         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2 );


         NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;     //定時器TIM1上溢中斷


         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //主優先級


         NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;


         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


         NVIC_Init( & NVIC_InitStructure);


}


② 將"nvic.c"文件添加到項目的"User"組中;


③ 將"./User/Nvic"路徑添加到項目文件包含的配置路徑中(在"C/C++"選項卡中的"Include Paths"中)。


五、主函數和終端服務函數


在main.c中添加中斷服務函數TIM1_UP_IRQHandler,修改主函數,內容如下:


#include "seg.h"


#include "tim.h"


#include "nvic.h"


int main()


{


         Seg_Init();


         My_NVIC_Init();


         Tim_Init();


         Show();


         while(1)

[1] [2]
關鍵字:TIM1  定時控制  數碼管顯示 引用地址:使用TIM1產生1秒定時控制數碼管顯示0-9(STM32_10)

上一篇:STM32串口通信之Hello(STM32_11)
下一篇:STM32外部中斷方式按鍵操作(STM32_09)

推薦閱讀

KeilMDK STM32 uCOS-II 編譯報錯:error: #268: declaration may not appear after executable statement in block編譯包含下面代碼的文件/* * 函數名:Task_USART1 * 描述 : 任務創建函數 * 輸入 :*p_arg * 輸出 : 無 */ void Task_USART1(void *p_arg) { (void)p_arg; INT8U err; INT8U *msg; ...
近日,外網曝光了一組將于2025年推出的概念手機——三星Galaxy Zero。這款三星Galaxy Zero概念采用全面屏零邊框設計,比Galaxy S10 5G版的曲面屏視覺上更加震撼。  據悉,這款三星Galaxy Zero概念采用幾乎延伸到背面的全面柔性曲面屏,可觸摸屏幕兩側和前部的任何部分進行交互。 除了零邊框全面屏,這款三星Galaxy Zero的攝像頭也厲害了...
C端四變量 B端三層面 2019年,全球開啟5G商用部署,華為迎來了新增長機遇。 雖然已手握近100個5G商業合同,但這家中國的通訊巨頭仍面臨諸多不利因素:全球疫情,多個國家的5G網絡建設進程受到波及;美國封殺,華為在全球5G業務發展仍然充滿變數…… 不過,華為在中國的發展順風順...

史海拾趣

問答坊 | AI 解惑

低通濾波器

低通濾波器 http://www.71168.cn   2006-6-16 8:20:01   關鍵字: 濾波器  低通濾波器是指車載功放中能夠讓低頻信號通過而不讓中、高頻信號通過的電路,其作用是濾去音頻信號中的中音和高音成分,增 ...…

查看全部問答∨

請推薦個JTAG仿真器

請推薦個JTAG仿真器 我們在用合眾達seed-vpm642的板子,但沒有JTAG仿真器,請大家給推薦個支持TMS320DM642的國內廠商的仿真器,謝謝大家!…

查看全部問答∨

畢業設計--07年電子設計競賽D(程控濾波器)

本帖最后由 paulhyde 于 2014-9-15 09:03 編輯 誰有關于這個設計的電路圖,請發給我好嗎?不勝感激!!! 郵箱:fangqun188@163.com  …

查看全部問答∨

快速發展的電池充電器IC

鋰離子電池因高能量密度的特點越來越受到人們的歡迎。但是,再強勁的鋰離子電池也有能量耗盡的一刻,只有跟充電器完美的配合,它才能發揮最大潛能。于是,在鋰離子電池大放異彩的今天,充電器芯片也得到了越來越多的關注。   多方面的挑戰    ...…

查看全部問答∨

WinCE中,基于對話框的程序,怎樣擁有唯一的窗口類? 為了取得窗口句柄

兩個基于對話框的程序,  GetClassName取得的窗口類名都是Dialog,兩個窗口都沒有標題,所以不能通過窗口標題,使用FindWindow取得窗口句柄。那么怎樣取得窗口句柄?…

查看全部問答∨

問個關于電池驅動的消息通知問題?

我下了個電池驅動,希望在電量改變的時候WinCE有消息提示,我現在發現在BatteryPDDGetStatus函數中置gpStatus->fChanged為TRUE,第一次是可以彈出電量低的消息的,但是后面就不再提示了,在串口上有類似如下的消息發出: 0x83b04400: Received power n ...…

查看全部問答∨

關于anydata的短信接收解碼問題

我使用的是 AnyDATA CDMA DTGS800-6025模塊 接收短信提前設置  AT+UGSM=1(使用第二套短信接口)  AT+CMGF=0(普通編碼輸出格式) AT+CMGR=0 接收第一條短信.模塊的輸出內容是 13 10 43 67 77 71 82 58 32 48 48 48 48 48 50 51 ...…

查看全部問答∨

TI運放應用設計的實用資料(高清中文PDF)

本帖最后由 paulhyde 于 2014-9-15 03:57 編輯 可能對大家很有用!  …

查看全部問答∨

allegro自動布線

allegro 自動布線,很不錯的…

查看全部問答∨

請教版主:STM32在IAR中怎樣阻止啟動代碼對RAM區進行清零

版主:     MCU在VDD不掉電的情況下復位,IAR中怎樣設置才能阻止啟動代碼對RAM區進行清零?…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 昭苏县| 洪湖市| 宝清县| 渝中区| 邯郸县| 鹤峰县| 库车县| 锦州市| 佛坪县| 南郑县| 称多县| 开平市| 梁河县| 阿拉尔市| 中西区| 宜川县| 镶黄旗| 霍邱县| 开封市| 桂阳县| 平舆县| 故城县| 封开县| 河池市| 龙山县| 湖南省| 汉寿县| 宁陵县| 福清市| 温州市| 长岛县| 普陀区| 芮城县| 嘉义县| 萨迦县| 饶平县| 临武县| 保亭| 华亭县| 永德县| 龙门县|