你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【我的STM32U5 项目秀】+02-STM32U5利用LL库点灯

[复制链接]
shenxiaolin_mai 发布时间:2023-2-2 23:27
        说实话,我不喜欢hall库,也许很多人用起来很顺手,但是我用起来不习惯,而且LL库效率明显高得多,也许是没有接触过上层代码的原因吧,那么我就来说一下LL库的环境搭建以及点灯。
        我们首先根据官方的LL库以及例程做更改,新建文件夹,拷贝文件,具体如下图。
01-文件夹.png

        并将文件拷贝到个个文件夹内,方便将文件归类以及后期文件管理,具体的可以看附件里,附件内的源码。具体的可以查看keil工程下的文件,如下图

02-文件.png

文件拷贝完成之后,然后添加文件路径和初始化定义,然后增加如下代码到Main.c文件。


  1. #include "stm32u5xx_ll_icache.h"
  2. #include "stm32u5xx_ll_pwr.h"
  3. #include "stm32u5xx_ll_crs.h"
  4. #include "stm32u5xx_ll_rcc.h"
  5. #include "stm32u5xx_ll_bus.h"
  6. #include "stm32u5xx_ll_system.h"
  7. #include "stm32u5xx_ll_exti.h"
  8. #include "stm32u5xx_ll_cortex.h"
  9. #include "stm32u5xx_ll_utils.h"
  10. #include "stm32u5xx_ll_dma.h"
  11. #include "stm32u5xx_ll_gpio.h"
  12. #include "stm32u5xx_ll_lpgpio.h"




  13. #define LED1_Pin LL_GPIO_PIN_7
  14. #define LED1_GPIO_Port GPIOC



  15. /**
  16.   * @brief Power Configuration
  17.   * @retval None
  18.   */
  19. static void SystemPower_Config(void)
  20. {

  21.   /*
  22.    * Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
  23.    */
  24.   LL_PWR_DisableUCPDDeadBattery();

  25.   /*
  26.    * Switch to SMPS regulator instead of LDO
  27.    */
  28.   LL_PWR_SetRegulatorSupply(LL_PWR_SMPS_SUPPLY);

  29.   while(LL_PWR_IsActiveFlag_REGULATOR()!=1)
  30.   {
  31.   }
  32. }

  33. /**
  34.   * @brief ICACHE Initialization Function
  35.   * @param None
  36.   * @retval None
  37.   */
  38. static void MX_ICACHE_Init(void)
  39. {

  40.   /** Enable instruction cache in 1-way (direct mapped cache)
  41.   */
  42.   LL_ICACHE_SetMode(LL_ICACHE_1WAY);
  43.   LL_ICACHE_Enable();
  44.   /* USER CODE BEGIN ICACHE_Init 2 */

  45.   /* USER CODE END ICACHE_Init 2 */

  46. }


  47. void SystemClock_Config(void)
  48. {
  49.   LL_FLASH_SetLatency(LL_FLASH_LATENCY_4);
  50.   while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_4)
  51.   {
  52.   }

  53.   LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);
  54.   LL_RCC_MSIS_Enable();

  55.    /* Wait till MSIS is ready */
  56.   while(LL_RCC_MSIS_IsReady() != 1)
  57.   {
  58.   }

  59.   LL_RCC_MSI_EnableRangeSelection();
  60.   LL_RCC_MSIS_SetRange(LL_RCC_MSISRANGE_4);
  61.   LL_RCC_MSI_SetCalibTrimming(16, LL_RCC_MSI_OSCILLATOR_1);
  62.   LL_RCC_PLL1_ConfigDomain_SYS(LL_RCC_PLL1SOURCE_MSIS, 1, 80, 2);
  63.   LL_RCC_PLL1_EnableDomain_SYS();
  64.   LL_RCC_SetPll1EPodPrescaler(LL_RCC_PLL1MBOOST_DIV_1);
  65.   LL_RCC_PLL1_SetVCOInputRange(LL_RCC_PLLINPUTRANGE_4_8);
  66.   LL_RCC_PLL1_Enable();

  67.    /* Wait till PLL is ready */
  68.   while(LL_RCC_PLL1_IsReady() != 1)
  69.   {
  70.   }

  71.    /* Intermediate AHB prescaler 2 when target frequency clock is higher than 80 MHz */
  72.   LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);

  73.   LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL1);

  74.    /* Wait till System clock is ready */
  75.   while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL1)
  76.   {
  77.   }

  78.   /* Insure 1µs transition state at intermediate medium speed clock based on DWT*/
  79.   CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;

  80.   DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
  81.   DWT->CYCCNT = 0;
  82.   while(DWT->CYCCNT < 100);

  83.   LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
  84.   LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
  85.   LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
  86.   LL_RCC_SetAPB3Prescaler(LL_RCC_APB3_DIV_1);

  87.   LL_Init1msTick(160000000);

  88.   LL_SetSystemCoreClock(160000000);
  89. }

  90. /**
  91.   * @brief GPIO Initialization Function
  92.   * @param None
  93.   * @retval None
  94.   */
  95. static void MX_GPIO_Init(void)
  96. {
  97.   LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

  98.   /* GPIO Ports Clock Enable */
  99.   LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);

  100.   /**/
  101.   LL_GPIO_ResetOutputPin(LED1_GPIO_Port, LED1_Pin);

  102.   /**/
  103.   GPIO_InitStruct.Pin = LED1_Pin;
  104.   GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
  105.   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
  106.   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  107.   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  108.   LL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);

  109. }



  110. int main(void)
  111. {
  112.   LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_PWR);
  113.   SystemClock_Config();
  114.   SystemPower_Config();
  115.   MX_GPIO_Init();
  116.   MX_ICACHE_Init();
  117.   while (1)
  118.   {
  119.                 LL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
  120.                 LL_mDelay(500);
  121.   }
  122.   /* USER CODE END 3 */
  123. }



  124. #ifdef  USE_FULL_ASSERT
  125. /**
  126.   * @brief  Reports the name of the source file and the source line number
  127.   *         where the assert_param error has occurred.
  128.   * @param  file: pointer to the source file name
  129.   * @param  line: assert_param error line source number
  130.   * @retval None
  131.   */
  132. void assert_failed(uint8_t *file, uint32_t line)
  133. {
  134.   /* USER CODE BEGIN 6 */

  135.   /* User can add his own implementation to report the file name and line number,
  136.      ex: printf("Wrong parameters value: file %s on line %d", file, line) */

  137.   /* Infinite loop */
  138.   while (1)
  139.   {
  140.   }
  141.   /* USER CODE END 6 */
  142. }
  143. #endif /* USE_FULL_ASSERT */
复制代码
在完成之后,编译,就可成功下载点灯,具体可查看附件。

03-点灯图.png

好了,先分享到这,过年后来了的第一篇。



附件:工程源码 Demo.rar (716.81 KB, 下载次数: 1)
收藏 评论1 发布时间:2023-2-2 23:27

举报

1个回答
STMCU-管管 回答时间:2023-2-3 17:15:07

期待下一篇

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版