您好,欢迎访问三七文档
点灯#includemain.h//头文件staticGPIO_InitTypeDefGPIO_InitStruct;//声明一个结构体voidSystemClock_Config(void);intmain(void){HAL_Init();//硬件初始化SystemClock_Config();//系统时钟配置LED2_GPIO_CLK_ENABLE();//打开对应GPIO外设时钟(使能对应时钟)/*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,&GPIO_InitStruct);//初始化while(1){HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);HAL_Delay(1000);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);HAL_Delay(5000);}}/*具体时钟配置,内部8兆低速输入,锁相环倍频后得到系统时钟,系统时钟经过分频处理得到各种频率时钟*/voidSystemClock_Config(void){RCC_ClkInitTypeDefRCC_ClkInitStruct={0};RCC_OscInitTypeDefRCC_OscInitStruct={0};RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_MSI;RCC_OscInitStruct.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=40;RCC_OscInitStruct.PLL.PLLR=2;RCC_OscInitStruct.PLL.PLLP=7;RCC_OscInitStruct.PLL.PLLQ=4;if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK){while(1);}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_DIV1;RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_4)!=HAL_OK){while(1);}}#ifdefUSE_FULL_ASSERTvoidassert_failed(uint8_t*file,uint32_tline){while(1){}}#endifSTM32L476RG简介:STM32L476RGT6微控制器,基于ARMCortex-M4处理器,带DSP,支持80MHz主频支持AndroidUNOR3Shield扩展板,微控制器所有IO口引脚通过排针座引出板载开发调试中常用的ST-LINK/V2-1调试器/编程器,支持对外部微控制器调试,只需要数据线就能连接电脑烧录程序,3个LED:一个USB通讯LED、一个电源LED、一个用户LED;两个机械按键:复位、用户USB接口的3个不同功能:虚拟串口、容量存储、调试接口3种不同供电方式:miniUSB接口供电、IO引脚用电、通过AndroidUNOR3Shield接口供电支持Keil、IAR、embed在线IDE的设计工具STM32L476RGT6微控制器特性:板卡核心处理器是stm32l476RGT6,低功耗产品ARMCortex-M4处理器,支持80MHz主频、1MB闪存、128KB的SRAM,内置浮点运算单元(FPU,floating-pointunit)可支持DSP指令,通用定时器*7、先进控制的计时器*2、基本定时器*2SPI*3、I2C*3、USART*3、UART*2、USBOTG全速、CAN*1、SAI*2SPDIF-接收*1、HDMI-CEC*1、LPUART*1、SDMMC、摄像头接口、LCD8x28or4x32、GPIO*5112个电容感应触摸通道、3个12位ADC配有16个通道,具有2个通道12位DAC、模拟比较器*2、运算放大器*2STM32启动BOOT0BOOT1设置方法不同的下载方式对应STM32启动方式也不同,如下图是STM32三种启动方式:BOOT0BOOT1启动模式0XUserFlashmemory(从用户闪存存储器启动)10Systemmemory(从系统存储器启动)11EmbeddedSRAM(从内嵌SRAM启动)第一种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,STM32的FLASH可以擦出10万次,所以不用担心芯片哪天会被擦爆!第二种启动方式是系统存储器启动方式,即我们常说的串口下载方式(ISP),不建议使用这种,速度比较慢。STM32中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0/1到该模式下重新烧写Flash即可恢复正常。第三种启动方式是STM32内嵌的SRAM启动。该模式用于调试。(1)Boot0设置为0后,代码将从主Flash当中启动,就我们目前所编程的地方启动,只要程序正常,上电之后都是可以正常工作。这一般作为ISP程序下载仿真烧写。一般正常批量生产的时候,我们也是推荐客户默认按照这样的方式去操作,上电之后,机器会自动运行。(2)Boot0设置为1,Boot1设置为0,代码将从ROM区启动,这上电启动都会运行Bootloader,在此过程中可以实现IAP程序更新,这一般是通过USART进行更新,此时如果USART或者是SPI端口没有接收到数据信号,那么MCU将会一直程序等待下去,不会自动跳到FLash主代码区。所以一般这作为个体产品想实现代码更新的工作。这需要你那边是否要考虑以后产品升级,如若升级,可以在Boot0引脚接入一个拔码开关实现对Boot0电平的控制,从而可以实现IAP更新功能。(3)Boot0以及Boot1都是为1的时候,那么此时程序将从RAM当中启动,程序会直接下载到RAM当中,这一般作为调试来用,因为有的时候代码不是很大,由于RAM下载代码速度很快,对于一些调试而言是非常有好处的,断电不会保存数据,这一点需要注意。在使用开发板时不小心下载了个有问题的程序,然后就悲剧了。无法往芯片中烧写程序了。每次想下载程序都会弹出如下的两个错误对话框:J-Link和STM32芯片都不大可能就这么坏掉了。多半是烧写进去的软件有些问题,占用了相应的IO管腿,导致无法利用J-Link与之通讯。那就想办法不让这个错误的程序运行了。例如下述代码如果烧写进去的话就会造成J-Link下次不能正常连接:GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);上述代码表示取消JTAG引脚功能,开始SWD引脚功能。STM32中是自带了BootLoader的,切换进BootLoader中就可以了。具体的方法就是通过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已经恢复正常
本文标题:STM32例程学习
链接地址:https://www.777doc.com/doc-2860948 .html