微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 使用标准外设库建立工程模板及流水灯实现

使用标准外设库建立工程模板及流水灯实现

时间:10-02 整理:3721RD 点击:

在此前,我一直在使用STM32F1系列开发项目,对F4系列不是很了解,为此,申请了一块NUCLEO-F412ZG开发板进行试用。


开发板收到了






首先初步了解了下NUCLEO-F412ZG开发板的基本属性:

使用STM32F412ZG芯片,芯片的官网地址:http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f4-series/stm32f412.html?querycriteria=productId=LN1916


4路USART,速率可高达12.5 Mbit/s

5路SPI(与I2S复用 ),速度高达50Mbit/s

4个I2C,高达1Mbps

2x CAN(2.0B有效)

所有封装都带1个SDIO,时钟高达48MHz

1个全速USB 2.0 OTG

2个全双工I2S,最高32-bit/192 kHz

3个单工I2S,最高32-bit/192 kHz

2个数字滤波器,用于∑Δ调制器

4个PDM接口,支持立体声麦克风

速度高达2.4 MSPS的12位ADC,

14个定时器,频率高达100 MHz的16和32位定时器

硬件随机数发生器


板子接口兼容了arduino,很多arduino兼容外设板可以不用杜邦线直接与开发板相连接




板子还自带了STLINK仿真器,非常方便。




初步了解了开发板之后,要开始了解这颗芯片了,首先要把工程建立起来。由于我感觉cube自带的hal库比较难用(也许是我了解的还不够深入,对标准库比较熟。),决定使用标准的外设库进行工程建立。


因为我比较熟悉keil,决定使用keil进行开发,首先要去keil官网下载pack包

STM32F4系列的KEIL支持包下载地址:http://www.keil.com/dd2/pack/,展开STM,找到STM32F4,即可找到下载。


经过百度,找到了标准外设库的下载地址:

http://www.stmcu.org/document/list/index/category-150#524 搜索STSW-STM32065


将库的压缩包解压



可以看到 库里已经包含了模板的项目文件


打开项目,修改配置。
先选择412这个芯片。


修改定义


移除这个.c


经过以上的修改后,可以编译成功


找到main.c,就可以开始自己的项目了。



用VS2015编辑代码很方便,而建立工程有点烦,送给大家原创一个小工具,快速建立VS2015工程文件
http://bbs.elecfans.com/jishu_1099747_1_1.html
标准库的风格跟STM32F103的库风格比较接近,所以有STM32F103的基础再使用STM32F412难度不会很高
简单的修改了下main.c,实现了流水灯,下载到开发板之后正常运行,证明工程建立正确,可以进行正常的开发工作了。

  1. /**
  2.   ******************************************************************************
  3.   * [url=home.php?mod=space&uid=1455510]@file[/url]    Project/STM32F4xx_StdPeriph_Templates/main.c
  4.   * [url=home.php?mod=space&uid=40524]@author[/url]  MCD Application Team
  5.   * [url=home.php?mod=space&uid=644434]@version[/url] V1.7.1
  6.   * @date    20-May-2016
  7.   * @brief   Main program body
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * <h2><center>? COPYRIGHT 2016 STMicroelectronics</center></h2>
  12.   *
  13.   * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
  14.   * You may not use this file except in compliance with the License.
  15.   * You may obtain a copy of the License at:
  16.   *
  17.   *        http://www.st.com/software_license_agreement_liberty_v2
  18.   *
  19.   * Unless required by applicable law or agreed to in writing, software
  20.   * distributed under the License is distributed on an "AS IS" BASIS,
  21.   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  22.   * See the License for the specific language governing permissions and
  23.   * limitations under the License.
  24.   *
  25.   ******************************************************************************
  26.   */

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

  29. /** @addtogroup Template_Project
  30.   * @{
  31.   */

  32. /* Private typedef -----------------------------------------------------------*/
  33. /* Private define ------------------------------------------------------------*/
  34. #define LED_RED                GPIO_Pin_14
  35. #define LED_GREEN        GPIO_Pin_0
  36. #define LED_BLUE        GPIO_Pin_7

  37. /* Private macro -------------------------------------------------------------*/
  38. /* Private variables ---------------------------------------------------------*/
  39. static __IO uint32_t uwTimingDelay;
  40. RCC_ClocksTypeDef RCC_Clocks;

  41. /* Private function prototypes -----------------------------------------------*/
  42. static void Delay(__IO uint32_t nTime);

  43. /* Private functions ---------------------------------------------------------*/


  44. typedef struct
  45. {
  46.         u32 b0 : 1;
  47.         u32 b1 : 1;
  48.         u32 b2 : 1;
  49.         u32 b3 : 1;
  50.         u32 b4 : 1;
  51.         u32 b5 : 1;
  52.         u32 b6 : 1;
  53.         u32 b7 : 1;
  54.         u32 b8 : 1;
  55.         u32 b9 : 1;
  56.         u32 b10 : 1;
  57.         u32 b11 : 1;
  58.         u32 b12 : 1;
  59.         u32 b13 : 1;
  60.         u32 b14 : 1;
  61.         u32 b15 : 1;
  62.         u32 b16 : 1;
  63.         u32 b17 : 1;
  64.         u32 b18 : 1;
  65.         u32 b19 : 1;
  66.         u32 b20 : 1;
  67.         u32 b21 : 1;
  68.         u32 b22 : 1;
  69.         u32 b23 : 1;
  70.         u32 b24 : 1;
  71.         u32 b25 : 1;
  72.         u32 b26 : 1;
  73.         u32 b27 : 1;
  74.         u32 b28 : 1;
  75.         u32 b29 : 1;
  76.         u32 b30 : 1;
  77.         u32 b31 : 1;
  78. }Bit;







  79. /**
  80.   * @brief  Main program
  81.   * @param  None
  82.   * @retval None
  83.   */
  84. int main(void)
  85. {
  86.         GPIO_InitTypeDef GPIO_InitStructure;


  87.         RCC_GetClocksFreq(&RCC_Clocks);
  88.         SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);

  89.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

  90.         GPIO_InitStructure.GPIO_Pin = LED_RED | LED_GREEN | LED_BLUE;
  91.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  92.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  93.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  94.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  95.         GPIO_Init(GPIOB, &GPIO_InitStructure);

复制代码

  1.         Bit * pb = (Bit*)&GPIOB->ODR;

  2.         //走马灯 三个定依次点亮,全部点亮后再依次熄灭。再依次点亮,循环。
  3.         while (1)
  4.         {
  5.                 pb->b14 = !pb->b14;
  6.                 Delay(300);
  7.                 pb->b7 = !pb->b7;
  8.                 Delay(300);
  9.                 pb->b0 = !pb->b0;
  10.                 Delay(300);
  11.         }
  12. }

  13. /**
  14.   * @brief  Inserts a delay time.
  15.   * @param  nTime: specifies the delay time length, in milliseconds.
  16.   * @retval None
  17.   */
  18. void Delay(__IO uint32_t nTime)
  19. {
  20.   uwTimingDelay = nTime;

  21.   while(uwTimingDelay != 0);
  22. }

  23. /**
  24.   * @brief  Decrements the TimingDelay variable.
  25.   * @param  None
  26.   * @retval None
  27.   */
  28. void TimingDelay_Decrement(void)
  29. {
  30.   if (uwTimingDelay != 0x00)
  31.   {
  32.     uwTimingDelay--;
  33.   }
  34. }

  35. #ifdef  USE_FULL_ASSERT

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

  47.   /* Infinite loop */
  48.   while (1)
  49.   {
  50.   }
  51. }
  52. #endif

  53. /**
  54.   * @}
  55.   */


  56. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/



复制代码



以上就是我的NUCLEO-F412ZG试用报告,谢谢电子发烧友论坛的支持,也希望大家多多指导,谢谢。

小编搞的非常不错呀  学习一下

小编,
这个就是官方提供的模板文件吧?
为什么删除stm32f4xx_fmc.c 呢?

因为硬件没有FMC,宏定义取消了某些定义,加入编译会报错

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top