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

【NUCLEO-L496ZG评测】第一部 : 开箱上电( 基于最新CubmeMx)

[复制链接]
harvardx 提问时间:2017-5-17 12:18 /
本帖最后由 harvardx 于 2017-5-18 16:41 编辑



      写在前面, STM32CubeMx是st的一项创举, 大大降低了,入门stm32 mcu的难度. 特别是新出不同系列不同核心的,如M0 到M3 到M4,变迁时, 我们不再需要再痛苦的去适应新架构,新寄存器, 我们要做的是一脉相承的写好应用, HAL层, 有效的屏蔽了差异性, 让我们更好的专注于应用.
      说话间,STM32CubeMx已经升级到了最新的4.21.0版本.


ZCF`)MEE%DU[RN5JW~BTZVL.png


如今的,stm32CubeMx经过多次的更新升级,已经华丽蜕变,变得成熟易用,不断的消灭bug,增加新的芯片. 可以到

http://www.st.com/en/development-tools/stm32cubemx.html


主要更新如下:
STM32CubeMX Software V4.21.0 / 05 April 2017
Major     release
   






  •         Added support of code generation, clock and power consumption         calculation for STM32F1, STM32F4, STM32H7, STM32L0, STM32L1 and         STM32L4 Series new part numbers.
  •         Added support for code generation using the Low Level libraries for         the STM32L0 and STM32F0 Series.
  •         Project can be generated as a general purpose makefile.
  •         Possibility to generate the code using the HAL library or the LL         library for each peripheral instance.
  •         MCU selection for a new project is using the same interface as         STMCUFinder.
   



下载最新的版本.如果已经安装旧版本, 可以很方便的在STM32CubeMx中直接升级.重启一下,就会自动替换就的版本,这单比以前的老版本强太多了.另外值得表扬的就是,现在的库的更新速度,非常快.在100M的常用网速下.对于动辄几百M的库文件,也是分分钟搞定. 彻底告别之前, 网速很快,但是 更新很慢的不足;
    发现一个问题,似乎最近在HAL之后,又出现了LL的库.


百度了下,  
LL库

  LL库(Low Layer)是ST最近新增的库,与HAL捆绑发布,文档也是和HAL文档在一起的,比如:在STM32F3x的HAL库说明文档中,ST新增了LL库这一章节,
  LL库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器。其支持所有外设。使用方法:

  • 独立使用,该库完全独立实现,可以完全抛开HAL库,只用LL库编程完成。
  • 混合使用,和HAL库结合使用。



       难道是为了满足,  我们有时候要去进行类似于寄存器控制的,操作, 而推出的么?  LL ,  应该就是字如其名,更加底层吧. 在后面的评测中, 会重点关注这一特性.


       言归正传,开始我们的开箱上电第一弹.


用microusb ,也就是大多数安卓手机的充电线, 将Nucleo-L496ZG,连接上电脑. 因为我的电脑之前也用过许多的Nucleo板.所以一阵搜索后, Nucleo-L496ZG,所需的各种驱动已经安装完毕; 如果是第一次使用, 要自行下载安装下, 反正st的官网也是足够的强大,需要什么都可以找到.重点是网速不慢. st的本土化也做的很好.尤其在我们社区的资料下载栏中,可以下载到已经稳定应用的各种软件和文档:
     文档 - 意法半导体STM32/STM8技术社区 - 提供最新的ST资讯和技术交流
      https://www.stmcu.org.cn/document/list/index/category-1066



安装完毕后,应该如图所示:
                  

驱动

驱动


     社区 在电脑系统里会多了一个U盘.无所多数,这个是nucleo板,mbed模式时的一种下载方式,将生成的bin直接拖入或者复制粘贴过去, 系统就会自动运行新的代码.

      社区的各种Nucleo 开发板活动推出多年. 相信大家都已经非常熟稔这一系列的热身动作了. 虽说近1-2年,Nucleo 又衍生细分出Nucleo-32  Nucleo-64, Nucleo-144, 但是基本是一脉相承的, 只是弥补了原来只能demo 64pin mcu的单一性的问题. 现在的Nucleo家族更全面 更加实用.
--------------------------------------------------------------------------

-- < 开始评测 >---

----------------------------------------------------------------------------




1,首先通过STM32CubeMx进行项目配置,选择board, NUCLEO-L496ZG
Y_]~6D~X0@90%)6{J8U0213.png




自动生成的工程,按照我们在界面上的选择和此款Nucleo板的特性,对IO进行了一个默认配置.
  1. /** System Clock Configuration
  2. */
  3. void SystemClock_Config(void)
  4. {

  5.   RCC_OscInitTypeDef RCC_OscInitStruct;
  6.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  7.     /**Initializes the CPU, AHB and APB busses clocks
  8.     */
  9.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
  10.   RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  11.   RCC_OscInitStruct.MSICalibrationValue = 0;
  12.   RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;
  13.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  14.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  15.   {
  16.     _Error_Handler(__FILE__, __LINE__);
  17.   }

  18.     /**Initializes the CPU, AHB and APB busses clocks
  19.     */
  20.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  21.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  22.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
  23.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  24.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  25.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  26.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  27.   {
  28.     _Error_Handler(__FILE__, __LINE__);
  29.   }

  30.     /**Configure the main internal regulator output voltage
  31.     */
  32.   if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
  33.   {
  34.     _Error_Handler(__FILE__, __LINE__);
  35.   }

  36.     /**Configure the Systick interrupt time
  37.     */
  38.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  39.     /**Configure the Systick
  40.     */
  41.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  42.   /* SysTick_IRQn interrupt configuration */
  43.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  44. }

  45. /** Configure pins as
  46.         * Analog
  47.         * Input
  48.         * Output
  49.         * EVENT_OUT
  50.         * EXTI
  51.      PD8   ------> USART3_TX
  52.      PD9   ------> USART3_RX
  53.      PA8   ------> USB_OTG_FS_SOF
  54.      PA10   ------> USB_OTG_FS_ID
  55.      PA11   ------> USB_OTG_FS_DM
  56.      PA12   ------> USB_OTG_FS_DP
  57. */
  58. static void MX_GPIO_Init(void)
  59. {

  60.   GPIO_InitTypeDef GPIO_InitStruct;

  61.   /* GPIO Ports Clock Enable */
  62.   __HAL_RCC_GPIOC_CLK_ENABLE();
  63.   __HAL_RCC_GPIOH_CLK_ENABLE();
  64.   __HAL_RCC_GPIOB_CLK_ENABLE();
  65.   __HAL_RCC_GPIOD_CLK_ENABLE();
  66.   __HAL_RCC_GPIOG_CLK_ENABLE();
  67.   HAL_PWREx_EnableVddIO2();
  68.   __HAL_RCC_GPIOA_CLK_ENABLE();

  69.   /*Configure GPIO pin Output Level */
  70.   HAL_GPIO_WritePin(GPIOB, LD3_Pin|LD2_Pin, GPIO_PIN_RESET);

  71.   /*Configure GPIO pin Output Level */
  72.   HAL_GPIO_WritePin(USB_PowerSwitchOn_GPIO_Port, USB_PowerSwitchOn_Pin, GPIO_PIN_RESET);

  73.   /*Configure GPIO pin : B1_Pin */
  74.   GPIO_InitStruct.Pin = B1_Pin;
  75.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  76.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  77.   HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);

  78.   /*Configure GPIO pins : LD3_Pin LD2_Pin */
  79.   GPIO_InitStruct.Pin = LD3_Pin|LD2_Pin;
  80.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  81.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  82.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  83.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  84.   /*Configure GPIO pins : STLK_RX_Pin STLK_TX_Pin */
  85.   GPIO_InitStruct.Pin = STLK_RX_Pin|STLK_TX_Pin;
  86.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  87.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  88.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  89.   GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
  90.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  91.   /*Configure GPIO pin : USB_PowerSwitchOn_Pin */
  92.   GPIO_InitStruct.Pin = USB_PowerSwitchOn_Pin;
  93.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  94.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  95.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  96.   HAL_GPIO_Init(USB_PowerSwitchOn_GPIO_Port, &GPIO_InitStruct);

  97.   /*Configure GPIO pin : USB_OverCurrent_Pin */
  98.   GPIO_InitStruct.Pin = USB_OverCurrent_Pin;
  99.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  100.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  101.   HAL_GPIO_Init(USB_OverCurrent_GPIO_Port, &GPIO_InitStruct);

  102.   /*Configure GPIO pins : USB_SOF_Pin USB_ID_Pin USB_DM_Pin USB_DP_Pin */
  103.   GPIO_InitStruct.Pin = USB_SOF_Pin|USB_ID_Pin|USB_DM_Pin|USB_DP_Pin;
  104.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  105.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  106.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  107.   GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
  108.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  109. }

  110. /* USER CODE BEGIN 4 */
复制代码


     
   我们在CubeMx中,将此处的频率从1MHZ修改成4MHZ 再点生成的时候.


@RUU[8)DFXS({IE7~]0D1P0.png


此时, MDK产生了,提示,发现.h和.c已经修改,提示,是否重新加载, 可见,CubeMX实现了图形化配置与代码自动生成的功能.
L5U4@Z`(AC4N`SPKIL1{A53.png




最后一步, 很简单的一步, 在main.c 里面的while 1主循环中,写下我们的用户代码


    /* LED 端口写1 */
    HAL_GPIO_WritePin(GPIOB, LD3_Pin|LD2_Pin, GPIO_PIN_SET);
    HAL_Delay(500);

   /* LED 端口写0 */
    HAL_GPIO_WritePin(GPIOB, LD3_Pin|LD2_Pin, GPIO_PIN_RESET);
    HAL_Delay(500);

点击LOAD图标,将代码下载到板子中, 自动生成的工程中,已经帮我自动选择好了stlink下载.  请注意在use debug drvier的 settings设置中.将reset and run给勾选了

VK(YQ%B~NKDC@Q_KT0]5{EH.png

第一个上电实验 ,简单的点灯实验,就这么完成.  STM32CubeMX给了我们难以想象的便利. 另外,如果电脑和我一样不太给力的同学,如果不想仍受慢如蜗牛的编译速度.可以选用MDK5 自带的最新的 V6.6 编译器 .速度杠杠滴.. 这样设置, 就可以直接用新的编译器编译拉 ..  速度给力啊.
~`@UPKF.1O{8{O~F~6MI6.png

      发现个小问题 ,自动生成的工程的.c文件中, 函数goto defintion功能怎么没有了.. 莫非是v6.6编译器带来的副作用?? 求解

项目代码在此:

TEST1_GPIO.zip (10.74 MB, 下载次数: 0)
收藏 1 评论4 发布时间:2017-5-17 12:18

举报

4个回答
zero99 回答时间:2017-5-17 14:50:22
版主,看不到图片啊  ..
harvardx 回答时间:2017-5-18 08:26:58
SORRY
上传出点问题,.
harvardx 回答时间:2017-5-18 15:05:27
文末提到的问题 ,确实是编译器引起的 .难道v6.6的快速编译 是通过牺牲没有brow information换来的??  太可惜了
harvardx 回答时间:2017-5-18 15:07:58
1DQPU{L}651)R)NF2[M7N.png

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版