1、Comment F1: 定义如下直接用下具替换更正规_HAL_RCC_GPIOA_CLK_ENABLE();Comment F2: 配置指定 GPIO管脚口GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_5;/同时指定配置多个管脚连接符|Comment F3: 配置相应管脚在中进行(默认对应管教号可随意,在 main中具体配置指定)Comment F4: (控制 LD2闪烁)上拉 PA5管脚延时 100ms后拉低500ms(只有一句会常亮或长灭无关延时)然而while (1)HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PI
2、N);/* Insert delay 100 ms */HAL_Delay(100);/点亮后熄灭 100ms在自动点亮闪烁(一句就可以实现闪烁延时不可省)调节亮灭不同频可再加同样一句进行不同延时即可点灯#include “main.h“/头文件static GPIO_InitTypeDef GPIO_InitStruct;/声明一个结构体void SystemClock_Config(void);int main(void)HAL_Init();/硬件初始化SystemClock_Config();/系统时钟配置LED2_GPIO_CLK_ENABLE();/打开对应 GPIO外设时钟(使能
3、对应时钟)/*GPIO模式配置*/GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;/推挽输出模式GPIO_InitStruct.Pull = GPIO_PULLUP;/上拉GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;/速率GPIO_InitStruct.Pin = LED2_PIN;/选择引脚HAL_GPIO_Init(LED2_GPIO_PORT, /初始化while (1)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);HAL_Delay(1000
4、);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);HAL_Delay(5000);/*具体时钟配置,内部 8 兆低速输入,锁相环倍频后得到系统时钟,系统时钟经过分频处理得到各种频率时钟*/void SystemClock_Config(void)RCC_ClkInitTypeDef RCC_ClkInitStruct = 0;RCC_OscInitTypeDef RCC_OscInitStruct = 0;RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;RCC_OscIn
5、itStruct.MSIState = RCC_MSI_ON;RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;RCC_OscInitStruct.PLL.PLLM = 1;RCC_OscInitStruct.PLL.PLLN
6、 = 40;RCC_OscInitStruct.PLL.PLLR = 2;RCC_OscInitStruct.PLL.PLLP = 7;RCC_OscInitStruct.PLL.PLLQ = 4;if(HAL_RCC_OscConfig(RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_C
7、lkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if(HAL_RCC_ClockConfig(#ifdef USE_FULL_ASSERTvoid assert_failed(uint8_t *file, uint32_t line)while (1)#endifSTM32L476RG 简介:STM32L476RGT6 微控制器,基于 ARM Cortex
8、-M4 处理器,带 DSP,支持80MHz 主频支持 Android UNO R3 Shield 扩展板,微控制器所有 IO 口引脚通过排针座引出板载开发调试中常用的 ST-LINK/ V2-1 调试器/ 编程器,支持对外部微控制器调试,只需要数据线就能连接电脑烧录程序,3 个 LED:一个 USB 通讯 LED、一个电源 LED、一个用户 LED;两个机械按键:复位、用户USB 接口的 3 个不同功能:虚拟串口、容量存储、调试接口3 种不同供电方式:mini USB 接口供电、IO 引脚用电、通过 Android UNO R3 Shield 接口供电支持 Keil、IAR、embed 在线
9、IDE 的设计工具STM32L476RGT6 微控制器特性:板卡核心处理器是 stm32l476RGT6,低功耗产品 ARM Cortex-M4 处理器,支持80 MHz 主频、1 MB 闪存、128 KB 的 SRAM ,内置浮点运算单元(FPU, floating-point unit)可支持 DSP 指令, 通用定时器*7、先进控制的计时器*2 、基本定时器*2 SPI*3、I2C*3、USART*3、UART*2 、USB OTG 全速、 CAN*1、SAI*2 SPDIF-接收*1、HDMI-CEC*1、LPUART*1、SDMMC 、摄像头接口、LCD 8x28 or 4x32、G
10、PIO*51 12 个电容感应触摸通道、3 个 12 位 ADC 配有 16 个通道,具有2 个通道 12 位 DAC、模拟比较器*2 、运算放大器*2STM32 启动 BOOT0 BOOT1 设置方法不同的下载方式对应 STM32 启动方式也不同,如下图是 STM32 三种启动方式:BOOT0 BOOT1 启动模式0 X User Flash memory(从用户闪存存储器启动)1 0 System memory(从系统存储器启动)1 1 Embedded SRAM(从内嵌 SRAM 启动)第一种启动方式是最常用的用户 FLASH 启动,正常工作就在这种模式下,STM32 的 FLASH 可
11、以擦出 10 万次,所以不用担心芯片哪天会被擦爆!第二种启动方式是系统存储器启动方式,即我们常说的串口下载方式(ISP),不建议使用这种,速度比较慢。STM32 中自带的 BootLoader 就是在这种启动方式中,如果出现程序硬件错误的话可以切换 BOOT0/1 到该模式下重新烧写 Flash 即可恢复正常。第三种启动方式是 STM32 内嵌的 SRAM 启动。该模式用于调试。(1) Boot0 设置为 0 后,代码将从主 Flash 当中启动,就我们目前所编程的地方启动,只要程序正常,上电之后都是可以正常工作。这一般作为 ISP 程序下载仿真烧写。一般正常批量生产的时候,我们也是推荐客户默
12、认按照这样的方式去操作,上电之后,机器会自动运行。 (2) Boot0 设置为 1, Boot1 设置为 0,代码将从 ROM 区启动,这上电启动都会运行 Bootloader,在此过程中可以实现 IAP程序更新,这一般是通过 USART 进行更新,此时如果 USART 或者是 SPI 端口没有接收到数据信号,那么 MCU 将会一直程序等待下去,不会自动跳到 FLash 主代码区。所以一般这作为个体产品 想实现代码更新的工作。这需要你那边是否要考虑以后产品升级,如若升级,可以在 Boot0 引脚接入一个拔码开关实现对Boot0 电平的控制,从而可以实现 IAP 更新功能。 (3)Boot0 以
13、及 Boot1 都是为 1 的时候,那么此时程序将从 RAM 当中启动,程序会直接下载到 RAM 当中,这一般作为调试来用,因为有的时候代码不是很大,由于 RAM 下载代码速度很快,对于一些调试而言是非常有好处的,断电不会保存数据,这一点需要注意。在使用开发板时不小心下载了个有问题的程序,然后就悲剧了。无法往芯片中烧写程序了。每次想下载程序都会弹出如下的两个错误对话框:J-Link 和 STM32 芯片都不大可能就这么坏掉了。多半是烧写进去的软件有些问题,占用了相应的 IO 管腿,导致无法利用 J-Link 与之通讯。那就想办法不让这个错误的程序运行了。例如下述代码如果烧写进去的话就会造成 J
14、-Link 下次不能正常连接:GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);上述代码表示取消 JTAG 引脚功能,开始 SWD 引脚功能。STM32 中是自带了 Boot Loader 的,切换进 Boot Loader 中就可以了。具体的方法就是通过 BOOT1、BOOT0 两个跳线来选择启动模式。修改跳线将启动模式切换为上述的第二种方式:BOOT0=1,BOOT1=0。断电,改跳线,重新上电,进入第二种方式:BOOT0=1,BOOT1=0,即 STM32 的BootLoader 模式。此时 J-Link 可以正常工作了,用 J-Link 下载新的程序,下载成功。再断电,把跳线改回来第一种启动方式(BOOT0=0 ,BOOT1=0),重新上电,一切正常,问题解决。我配置了 PA14 出现无法下载的上述问题,现在问题已解决:开发板默认 BOOT0 下拉为0,BOOT1 接地为 0, (BOOT0=0 ,BOOT1=0 )我上拉 BOOT1 至 3.3V(跳线上拉 R33 非接地端到 3.3V), 模式变为第二种模式(BOOT0=1,BOOT1=0)启动,此时 J-LINK 可以正常下载程序,下载进去正常程序后断开 R33 的跳线恢复原有默认连接,J-LINK 已经恢复正常