STM32H743+RTT-Studio

1.摘要
本篇筆記主要介紹,在RT-Thread環境下,如何使用RT-Thread studio開發 STM32應用,以STM32H43爲例介紹.

2. 準備工做linux

1, 安裝RT-Thread Studio微信

3. RTT Studioide

如今RTT-Studio已經更新到了1.15版本,記得第一個版本出來的時候就試用過,前兩天更新了1.15版本,今天恰好在H743的板子上使用了下,功能強大,並且大大方便了原來使用集成IDE開發嵌入式軟件的工程師,Studio替咱們作了不少事情,原來最先須要env工具和Scons構建工具,相似於linux下的配置菜單進行開發,而如今這些功能都集成進了studio,比較吸引開發者的是有大量現成的軟件包能夠用。函數

4. Studio使用工具

其實最先IDE出來的時候給你們簡單介紹過,由於最近恰好在作基於H743的項目,而以前是用freeRTOS作的,如今想在作個RTT的版本,就直接選擇用RTT Studio來開始。打開IDE,根據本身的實際進行修改,主要有控制檯串口的硬件引腳。這裏須要注意最底下一行的文字說明,使用IDE創建的工程默認是使用的HIS做爲時鐘,可是咱們通常都是使用HSE,因此工程創建好後,須要手動修改。spa





先使用自動創建的工程編譯完成後下載,看按效果,能夠打開控制檯串口.net





證實使用內部HIS時鐘自動創建的工程沒有問題,可是考慮到後期咱們要使用更多外設,通常都使用HSE,所以咱們修改內部時鐘爲外部時鐘,配置爲400M,主要是修改文件drv_clk.c 的時鐘配置函數blog

ci

void system_clock_config(int target_freq_mhz)開發

{

   RCC_OscInitTypeDef RCC_OscInitStruct = {0};

   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


   /** Supply configuration update enable

   */

   HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);

   /** Configure the main internal regulator output voltage

   */

   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);


   while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}

   /** Initializes the CPU, AHB and APB busses clocks

   */

   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

   RCC_OscInitStruct.HSIState = RCC_HSI_DIV1;

   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;

   RCC_OscInitStruct.PLL.PLLM = 4;

   RCC_OscInitStruct.PLL.PLLN = 60;

   RCC_OscInitStruct.PLL.PLLP = 2;

   RCC_OscInitStruct.PLL.PLLQ = 2;

   RCC_OscInitStruct.PLL.PLLR = 2;

   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3;

   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;

   RCC_OscInitStruct.PLL.PLLFRACN = 0;

   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

   {

       Error_Handler();

   }

   /** Initializes the CPU, AHB and APB busses clocks

   */

   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2

                               |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;

   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;

   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;

   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;

   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;

   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;

   RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;


   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)

   {

       Error_Handler();

   }

}

改成

void system_clock_config(int target_freq_mhz)

{

   RCC_OscInitTypeDef RCC_OscInitStruct = {0};

   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


   /** Supply configuration update enable

   */

   HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);

   /** Configure the main internal regulator output voltage

   */

   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);


   while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}

   /** Initializes the CPU, AHB and APB busses clocks

   */

   /*RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

   RCC_OscInitStruct.HSIState = RCC_HSI_DIV1;

   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;

   RCC_OscInitStruct.PLL.PLLM = 4;

   RCC_OscInitStruct.PLL.PLLN = 60;

   RCC_OscInitStruct.PLL.PLLP = 2;

   RCC_OscInitStruct.PLL.PLLQ = 2;

   RCC_OscInitStruct.PLL.PLLR = 2;

   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3;

   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;

   RCC_OscInitStruct.PLL.PLLFRACN = 0;*/

   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

     RCC_OscInitStruct.HSEState = RCC_HSE_ON;

     RCC_OscInitStruct.HSIState = RCC_HSI_OFF;

     RCC_OscInitStruct.CSIState = RCC_CSI_OFF;

     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;


     RCC_OscInitStruct.PLL.PLLM = 5;

     RCC_OscInitStruct.PLL.PLLN = 160;

     RCC_OscInitStruct.PLL.PLLFRACN = 0;

     RCC_OscInitStruct.PLL.PLLP = 2;

     RCC_OscInitStruct.PLL.PLLR = 2;

     RCC_OscInitStruct.PLL.PLLQ = 4;


     RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;

     RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;

   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

   {

       Error_Handler();

   }

   /** Initializes the CPU, AHB and APB busses clocks

   */

   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2

                               |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;

   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;

   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;

   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;

   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;

   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;

   RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;


   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)

   {

       Error_Handler();

   }

}


配置修改完正文後,再次編譯下載運行,打開控制檯串口

能夠看到程序正常運行,證實咱們時鐘修改無誤,以後就能夠在此工程基礎上添加更多功能,使用更多軟件包。例如可使用RT-Thread Setting進行更多配置。使能更多外設和軟件包。,H743功能很強大,能夠將SDIO, 8個串口,I2C,CAN,SPI, DMA, LCD等外設都用起來,進行更深刻的開發和應用。


5. 參考文檔

序號

文獻

1

STM32H743RM

2

https://www.rt-thread.org/


本文分享自微信公衆號 - 嵌入式程序猿(InterruptISR)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息