[开发工具] EmBitz STM32 HAL 固件库之 GPIO

[复制链接]
2511|31
 楼主| yiy 发表于 2019-3-21 12:39 | 显示全部楼层 |阅读模式
出于EmBitz 编写STM32的例子很少特写本贴让大家一起来学习!本例子硬件基于我手上的STM32F4-Discovery板子

1:我们先用EmBitz新建工程,怎么建工程这里就不啰嗦了之前的**有详细说明,在新建工程时我们一直按着一直前**一直到下面截图步骤
865495c930cb864c95.png
在此我们去掉 Standard Peripherals Library选项,并点完成

 楼主| yiy 发表于 2019-3-21 12:40 | 显示全部楼层
2:接下来我们使用STM32CubeMX下载HAL固件库
105135c93159d663c3.png
3:我们在类似于C:\Users\kevin461693690\STM32Cube\Repository路径找到HAL固件库我们首先拷贝CMSIS文件夹下Include里面的内容到EmBitz工程下的cmsis文件夹中(先删除原来的);再在工程目录下新建一个HAL文件夹,再将固件库STM32Cube_FW_F4_V1.13.0\Drivers\STM32F4xx_HAL_Driver这个路径下的Inc,Src文件夹拷贝到工程下的HAL文件夹中


 楼主| yiy 发表于 2019-3-21 12:41 | 显示全部楼层
4:在工程目录中添加以下文件(右击工程选择Add files…)
13655c9315c83856c.png
975665c9315ce9a641.png
5:我们把固件库STM32Cube_FW_F4_V1.13.0\Projects\STM32F4-Discovery\Examples\GPIO\GPIO_EXTI例子里面的Inc,Src文件夹里面的内容分别拷贝到我们建立的工程下的对应文件里面(先删掉原来的,不要删掉src里面的启动文件),我们再到固件库STM32Cube_FW_F4_V1.13.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include这个路径下把stm32f4xx.h,stm32f407xx.h,system_stm32f4xx.h三个文件拷贝到工程下inc文件夹中,再在工程文件中加入它们
37195c9315e3e4023.png

326525c9315eb4b46e.png

 楼主| yiy 发表于 2019-3-21 12:43 | 显示全部楼层
6:右击工程选择Build options…添加以下内容
524605c9316045cf69.png
118375c93160b9d8ee.png
7:点编译你会遇到几个报错的地方,你自己看看会发现是固件库例子原来底层自定义代码报错,因为我们没添加所以直接把那些报错的删掉,就会只剩下浮点单元被重定义的警告,这个我们先不关心

报错代码:

  1. /* Configure LED3, LED4, LED5 and LED6 */
  2.   BSP_LED_Init(LED3);
  3.   BSP_LED_Init(LED4);
  4.   BSP_LED_Init(LED5);
  5.   BSP_LED_Init(LED6);
  1. if(GPIO_Pin == KEY_BUTTON_PIN)
  2.   {
  3.     /* Toggle LED3 */
  4.     BSP_LED_Toggle(LED3);
  5.     /* Toggle LED4 */
  6.     BSP_LED_Toggle(LED4);   
  7.     /* Toggle LED5 */
  8.     BSP_LED_Toggle(LED5);   
  9.     /* Toggle LED6 */
  10.     BSP_LED_Toggle(LED6);
  11.   }

等等代码

8:添加我们的测试代码(整个main.c)

  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"

  3. /** @addtogroup STM32F4xx_HAL_Examples
  4.   * @{
  5.   */

  6. /** @addtogroup GPIO_EXTI
  7.   * @{
  8.   */

  9. /* Private typedef -----------------------------------------------------------*/
  10. /* Private define ------------------------------------------------------------*/
  11. /* Private macro -------------------------------------------------------------*/
  12. /* Private variables ---------------------------------------------------------*/
  13. static GPIO_InitTypeDef  GPIO_InitStruct;
  14. /* Private function prototypes -----------------------------------------------*/
  15. static void SystemClock_Config(void);
  16. static void Error_Handler(void);

  17. /* Private functions ---------------------------------------------------------*/

  18. /**
  19.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Main program
  20.   * @param  None
  21.   * @retval None
  22.   */
  23. int main(void)
  24. {
  25. /* This sample code shows how to use STM32F4xx GPIO HAL API to toggle PD12, PD13,
  26.     PD14, and PD14 IOs (connected to LED4, LED3, LED5 and LED6 on STM32F401C-DISCO board (MB1115B))
  27.     in an infinite loop.
  28.     To proceed, 3 steps are required: */

  29.   /* STM32F4xx HAL library initialization:
  30.        - Configure the Flash prefetch, instruction and Data caches
  31.        - Configure the Systick to generate an interrupt each 1 msec
  32.        - Set NVIC Group Priority to 4
  33.        - Global MSP (MCU Support Package) initialization
  34.      */
  35.   HAL_Init();

  36.   /* Configure the system clock to 168 MHz */
  37.   SystemClock_Config();

  38.   /* Configure LED3, LED4, LED5 and LED6 */
  39.   /*##-1- Enable GPIOD Clock (to be able to program the configuration registers) */
  40.   __HAL_RCC_GPIOD_CLK_ENABLE();

  41.   /*##-2- Configure PD12 IO in output push-pull mode to drive external LED ###*/
  42.   GPIO_InitStruct.Pin = GPIO_PIN_12;
  43.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  44.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  45.   GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
  46.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  47.   /* Infinite loop */
  48.   while (1)
  49.   {
  50.     HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);

  51.     /* Insert a 100ms delay */
  52.     HAL_Delay(100);
  53.   }
  54. }

  55. /**
  56.   * @brief  System Clock Configuration
  57.   *         The system Clock is configured as follow :
  58.   *            System Clock source            = PLL (HSE)
  59.   *            SYSCLK(Hz)                     = 168000000
  60.   *            HCLK(Hz)                       = 168000000
  61.   *            AHB Prescaler                  = 1
  62.   *            APB1 Prescaler                 = 4
  63.   *            APB2 Prescaler                 = 2
  64.   *            HSE Frequency(Hz)              = 8000000
  65.   *            PLL_M                          = 8
  66.   *            PLL_N                          = 336
  67.   *            PLL_P                          = 2
  68.   *            PLL_Q                          = 7
  69.   *            VDD(V)                         = 3.3
  70.   *            Main regulator output voltage  = Scale1 mode
  71.   *            Flash Latency(WS)              = 5
  72.   * @param  None
  73.   * @retval None
  74.   */
  75. static void SystemClock_Config(void)
  76. {
  77.   RCC_ClkInitTypeDef RCC_ClkInitStruct;
  78.   RCC_OscInitTypeDef RCC_OscInitStruct;

  79.   /* Enable Power Control clock */
  80.   __HAL_RCC_PWR_CLK_ENABLE();

  81.   /* The voltage scaling allows optimizing the power consumption when the device is
  82.      clocked below the maximum system frequency, to update the voltage scaling value
  83.      regarding system frequency refer to product datasheet.  */
  84.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  85.   /* Enable HSE Oscillator and activate PLL with HSE as source */
  86.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  87.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  88.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  89.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  90.   RCC_OscInitStruct.PLL.PLLM = 8;
  91.   RCC_OscInitStruct.PLL.PLLN = 336;
  92.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  93.   RCC_OscInitStruct.PLL.PLLQ = 7;
  94.   if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  95.   {
  96.     Error_Handler();
  97.   }

  98.   /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
  99.      clocks dividers */
  100.   RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  101.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  102.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  103.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  104.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  105.   if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  106.   {
  107.     Error_Handler();
  108.   }

  109.   /* STM32F405x/407x/415x/417x Revision Z devices: prefetch is supported  */
  110.   if (HAL_GetREVID() == 0x1001)
  111.   {
  112.     /* Enable the Flash prefetch */
  113.     __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
  114.   }
  115. }


  116. /**
  117.   * @brief  This function is executed in case of error occurrence.
  118.   * @param  None
  119.   * @retval None
  120.   */
  121. static void Error_Handler(void)
  122. {
  123.   /* Turn LED5 on */
  124.   while(1)
  125.   {
  126.   }
  127. }

  128. #ifdef  USE_FULL_ASSERT

  129. /**
  130.   * @brief  Reports the name of the source file and the source line number
  131.   *         where the assert_param error has occurred.
  132.   * @param  file: pointer to the source file name
  133.   * @param  line: assert_param error line source number
  134.   * @retval None
  135.   */
  136. void assert_failed(uint8_t* file, uint32_t line)
  137. {
  138.   /* User can add his own implementation to report the file name and line number,
  139.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  140.   /* Infinite loop */
  141.   while (1)
  142.   {
  143.   }
  144. }
  145. #endif


 楼主| yiy 发表于 2019-3-21 12:43 | 显示全部楼层
9:编译烧录后我们就可以看到STM32F4-Discovery板子上的LD4按着我们设定的延时在那里欢快的闪烁
paotangsan 发表于 2019-4-9 08:48 | 显示全部楼层
EmBitz 这个是库还是什么工具啊
renzheshengui 发表于 2019-4-9 09:03 | 显示全部楼层
这个是一个什么工具吗
wakayi 发表于 2019-4-9 09:07 | 显示全部楼层
代码很规矩
wowu 发表于 2019-4-9 09:35 | 显示全部楼层
感谢楼主分享
xiaoqizi 发表于 2019-4-9 10:21 | 显示全部楼层
需要什么版本的cube啊
wdliming 发表于 2020-4-20 09:40 | 显示全部楼层
谢谢分享~~~
jiekou001 发表于 2020-4-20 21:53 | 显示全部楼层
好用不更新了。
小灵通2018 发表于 2020-10-6 14:36 | 显示全部楼层
来看看。
arm86 发表于 2023-3-25 13:21 | 显示全部楼层
EmBitz 1.11 安装文件压缩包
链接:https://pan.baidu.com/s/17BKHPt_g4u28aklUIBO7BA
提取码:qxdv
chenqianqian 发表于 2023-3-26 10:17 来自手机 | 显示全部楼层
ST 现在的片子太难搞了啊
zhanghqi 发表于 2023-8-2 22:17 | 显示全部楼层
EmBitz 这个是库还是什么工具啊
zhenykun 发表于 2023-8-2 22:19 | 显示全部楼层

这个是一个什么工具吗
wyjie 发表于 2023-8-2 22:21 | 显示全部楼层
代码很规矩
jlyuan 发表于 2023-8-2 22:23 | 显示全部楼层
需要什么版本的cube啊
yszong 发表于 2023-8-2 22:25 | 显示全部楼层
好用不更新了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

yiy

114

主题

1966

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部