打印
[开发工具]

EmBitz STM32 HAL 固件库之 GPIO

[复制链接]
1767|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yiy|  楼主 | 2019-3-21 12:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
出于EmBitz 编写STM32的例子很少特写本贴让大家一起来学习!本例子硬件基于我手上的STM32F4-Discovery板子

1:我们先用EmBitz新建工程,怎么建工程这里就不啰嗦了之前的**有详细说明,在新建工程时我们一直按着一直前**一直到下面截图步骤

在此我们去掉 Standard Peripherals Library选项,并点完成

沙发
yiy|  楼主 | 2019-3-21 12:40 | 只看该作者
2:接下来我们使用STM32CubeMX下载HAL固件库

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…)


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文件夹中,再在工程文件中加入它们




使用特权

评论回复
地板
yiy|  楼主 | 2019-3-21 12:43 | 只看该作者
6:右击工程选择Build options…添加以下内容


7:点编译你会遇到几个报错的地方,你自己看看会发现是固件库例子原来底层自定义代码报错,因为我们没添加所以直接把那些报错的删掉,就会只剩下浮点单元被重定义的警告,这个我们先不关心

报错代码:

 /* Configure LED3, LED4, LED5 and LED6 */
  BSP_LED_Init(LED3);
  BSP_LED_Init(LED4);
  BSP_LED_Init(LED5);
  BSP_LED_Init(LED6);
if(GPIO_Pin == KEY_BUTTON_PIN)
  {
    /* Toggle LED3 */
    BSP_LED_Toggle(LED3);
    /* Toggle LED4 */
    BSP_LED_Toggle(LED4);   
    /* Toggle LED5 */
    BSP_LED_Toggle(LED5);   
    /* Toggle LED6 */
    BSP_LED_Toggle(LED6);
  }

等等代码

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

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

/** @addtogroup STM32F4xx_HAL_Examples
  * @{
  */

/** @addtogroup GPIO_EXTI
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
static GPIO_InitTypeDef  GPIO_InitStruct;
/* Private function prototypes -----------------------------------------------*/
static void SystemClock_Config(void);
static void Error_Handler(void);

/* Private functions ---------------------------------------------------------*/

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

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

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

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

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

  /* Infinite loop */
  while (1)
  {
    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);

    /* Insert a 100ms delay */
    HAL_Delay(100);
  }
}

/**
  * @brief  System Clock Configuration
  *         The system Clock is configured as follow :
  *            System Clock source            = PLL (HSE)
  *            SYSCLK(Hz)                     = 168000000
  *            HCLK(Hz)                       = 168000000
  *            AHB Prescaler                  = 1
  *            APB1 Prescaler                 = 4
  *            APB2 Prescaler                 = 2
  *            HSE Frequency(Hz)              = 8000000
  *            PLL_M                          = 8
  *            PLL_N                          = 336
  *            PLL_P                          = 2
  *            PLL_Q                          = 7
  *            VDD(V)                         = 3.3
  *            Main regulator output voltage  = Scale1 mode
  *            Flash Latency(WS)              = 5
  * @param  None
  * @retval None
  */
static void SystemClock_Config(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_OscInitTypeDef RCC_OscInitStruct;

  /* Enable Power Control clock */
  __HAL_RCC_PWR_CLK_ENABLE();

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

  /* Enable HSE Oscillator and activate PLL with HSE as source */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

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

  /* STM32F405x/407x/415x/417x Revision Z devices: prefetch is supported  */
  if (HAL_GetREVID() == 0x1001)
  {
    /* Enable the Flash prefetch */
    __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
  }
}


/**
  * @brief  This function is executed in case of error occurrence.
  * @param  None
  * @retval None
  */
static void Error_Handler(void)
{
  /* Turn LED5 on */
  while(1)
  {
  }
}

#ifdef  USE_FULL_ASSERT

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

  /* Infinite loop */
  while (1)
  {
  }
}
#endif


使用特权

评论回复
5
yiy|  楼主 | 2019-3-21 12:43 | 只看该作者
9:编译烧录后我们就可以看到STM32F4-Discovery板子上的LD4按着我们设定的延时在那里欢快的闪烁

使用特权

评论回复
6
paotangsan| | 2019-4-9 08:48 | 只看该作者
EmBitz 这个是库还是什么工具啊

使用特权

评论回复
7
renzheshengui| | 2019-4-9 09:03 | 只看该作者
这个是一个什么工具吗

使用特权

评论回复
8
wakayi| | 2019-4-9 09:07 | 只看该作者
代码很规矩

使用特权

评论回复
9
wowu| | 2019-4-9 09:35 | 只看该作者
感谢楼主分享

使用特权

评论回复
10
xiaoqizi| | 2019-4-9 10:21 | 只看该作者
需要什么版本的cube啊

使用特权

评论回复
11
wdliming| | 2020-4-20 09:40 | 只看该作者
谢谢分享~~~

使用特权

评论回复
12
jiekou001| | 2020-4-20 21:53 | 只看该作者
好用不更新了。

使用特权

评论回复
13
小灵通2018| | 2020-10-6 14:36 | 只看该作者
来看看。

使用特权

评论回复
14
arm86| | 2023-3-25 13:21 | 只看该作者
EmBitz 1.11 安装文件压缩包
链接:https://pan.baidu.com/s/17BKHPt_g4u28aklUIBO7BA
提取码:qxdv

使用特权

评论回复
15
chenqianqian| | 2023-3-26 10:17 | 只看该作者
ST 现在的片子太难搞了啊

使用特权

评论回复
16
zhanghqi| | 2023-8-2 22:17 | 只看该作者
EmBitz 这个是库还是什么工具啊

使用特权

评论回复
17
zhenykun| | 2023-8-2 22:19 | 只看该作者

这个是一个什么工具吗

使用特权

评论回复
18
wyjie| | 2023-8-2 22:21 | 只看该作者
代码很规矩

使用特权

评论回复
19
jlyuan| | 2023-8-2 22:23 | 只看该作者
需要什么版本的cube啊

使用特权

评论回复
20
yszong| | 2023-8-2 22:25 | 只看该作者
好用不更新了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

yiy

106

主题

1787

帖子

4

粉丝