一本精品热在线视频,久久免费视频分类,精品婷婷乱码久久久久久蜜桃,在线可以免费观看的Av

<mark id="vd61v"><dl id="vd61v"></dl></mark>
    <sub id="vd61v"><ol id="vd61v"></ol></sub>

  • <sub id="vd61v"><ol id="vd61v"></ol></sub>
    關(guān) 閉

    新聞中心

    EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 功率監(jiān)測與控制系統(tǒng)DIY——搭建環(huán)境,定時器翻轉(zhuǎn)LED

    功率監(jiān)測與控制系統(tǒng)DIY——搭建環(huán)境,定時器翻轉(zhuǎn)LED

    作者:CoderX9527 時間:2025-07-16 來源:EEPW 收藏

    1   任務(wù)目標(biāo)

    使用定時器實現(xiàn)1s翻轉(zhuǎn)LED驗證開發(fā)板時鐘晶振是否正確

    2   開發(fā)工具

    支持的開發(fā)環(huán)境很多,我現(xiàn)在中意下面的組合:

    ●   CubeMX圖形化配置、生成工程;

    ●   CubeCLT意法半導(dǎo)體退出的一體化、多操作系統(tǒng)支持的命令行工具,主要面向第三發(fā)集成開發(fā)環(huán)境提供商,允許他們在自己的IDE框架內(nèi)集成對STM32微控制器的支持,包括代碼編譯、燒錄、調(diào)試等功能;

    ●   CLion 一個功能強(qiáng)大的且智能化的C/C++開發(fā)環(huán)境,具有高效的代碼編輯、調(diào)試和項目管理能力;

    ●   STM32CubeIDE/Keil MDK/IAR曾經(jīng)非常流行的STM32開發(fā)環(huán)境,這里不做介紹;

    分別安裝STM32CubeMX/STM32CubeCLT以及CLion,然后再Clion 中新建STM32CubeMX 工程。

    在CLion 中第一次新建STM32CubeMX,還需要配置STM32CubeMX和STM32CubeCLT工具路徑,下圖中(2)出點(diǎn)擊“編輯”分別選擇對應(yīng)的路徑即可。

    ●   下圖在SDK目錄中新建一個工程;

    ●   STM32CubeMX和STM32CubeCLT工具檢測OK;

    ●   啟動STM32CubeMX配置工程,導(dǎo)出CMake工程即可

    ●   然后CLion打開剛才生成的工程目錄即可,自動加載CMakeLists.txt并配置工程

    1752639935125569.png

    第一次打開CMakeLists.txt工程,彈出下面的配置對話框,一般選擇Debug類型即可

    1752640005354207.png

    3   ST-Link固件升級

    第一次調(diào)試工程,彈出ST-Link固件升級提示,按照下面的提示操作,升級固件通過。

    1752640545820118.png

    點(diǎn)擊右下角的YES開始升級固件

    1752640603164340.png

    固件升級成功

    1752640635979700.png

    升級后固件版本號變了

    1752640695296637.png

    4   用戶LED

    LED是指用戶LED,即板子上的綠色LD2,對應(yīng)PA5,原理圖如下:

    1752640737807653.png

    4.1 定時器

    這里使用定時器1,配置如下:

    ●   時鐘源,選擇Internal Clock(TIM1 位于APB2 Timer Clock)

    ●   預(yù)分頻為1000-1

    ●   向上計數(shù)模式

    ●   計數(shù)周期10000-1

    1752640797912245.png

    4.2 為什么這么設(shè)置預(yù)分頻和計數(shù)周期呢?

    因為參考手冊中STM32F411xx的TIM1位于APB2 Timer clock 上,見下圖。而且在時鐘樹中把APB2 Timer Clock 設(shè)置為100 MHz。

    所以預(yù)分頻1000-1把TIM1時鐘頻率配置為100MHz/1000=100kHz

    計數(shù)周期10000-1即0.1秒鐘產(chǎn)生中斷?!疽獙崿F(xiàn)1 秒鐘翻轉(zhuǎn)LED,需要計數(shù)10 次】

    1752640875200832.png

    1752640905867022.png

    最后使能TIM1的中斷,中斷類型是TIM1 update interrupt and TIM10 global interrupt,表示定時器溢出產(chǎn)生中斷。

    1752640950730918.png

    5   流程

    ●   主流程中初始化硬件(GPIO、UART2、TIM1)然后已開啟中斷的方式啟動TIM1

    ●   在TIM1的溢出中斷服務(wù)函數(shù)中層層調(diào)用到HAL_TIM_PeriodElapsedCallback() 函數(shù),計數(shù)10 次達(dá)到1 秒鐘,翻轉(zhuǎn)用戶LD2

    女超人.jpg

    6 關(guān)鍵代碼

    6.1 主函數(shù)

    int main(void)

    {


      /* USER CODE BEGIN 1 */

      /* USER CODE END 1 */

      /* MCU Configuration--------------------------------------------------------*/

      /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

      HAL_Init();


      /* USER CODE BEGIN Init */

      /* USER CODE END Init */

      /* Configure the system clock */

      SystemClock_Config();

      /* USER CODE BEGIN SysInit */

      /* USER CODE END SysInit */

      /* Initialize all configured peripherals */

      MX_GPIO_Init();

      MX_USART2_UART_Init();

      MX_TIM1_Init(); // 配置定時器TIM1

      /* USER CODE BEGIN 2 */


      HAL_TIM_Base_Start_IT(&htim1);//啟動定時器TIM1

      /*USER CODE END 2 */


      /*Infinite loop */

      /*USER CODE BEGIN WHILE */

      while (1)

      {

        HAL_Delay(200);

        /* USER CODE END WHILE */


        /* USER CODE BEGIN 3 */

      }

      /* USER CODE END 3 */

    }

    6.2 TIM1定時溢出回調(diào)函數(shù)

    tim.c中新增加一個函數(shù),定時器溢出回調(diào)函數(shù)HAL_TIM_PeriodElapsedCallback()中實現(xiàn)1秒鐘翻轉(zhuǎn)LED2

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

    {

      if (htim->Instance == htim1.Instance)//確保是特定的定時器實例(例如TIM1、TIM2 等)

        {

        tim_elapsed_cnt++;

        if (tim_elapsed_cnt % 10 == 0) 

        {

          HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);

        }

      }

    }

    1752641891597046.png

    7   實測演示

    7.1 LD2閃爍

    板子中心的綠色LD 每隔一秒鐘點(diǎn)亮、熄滅一次。

    (本文來源于《EEPW》


    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉