发新帖

[试用评测] 【正点原子阿波罗STM32F767开发板试用体验】+点亮LED灯

[复制链接]
发表于 2018-12-29 19:57:35
| 122 查看 | 0 回复
本帖最后由 龙希0514 于 2018-12-29 20:10 编辑

【正点原子阿波罗STM32F767开发板试用体验】+点亮LED
一.  硬件平台与核心知识
1.        ALIENTEK阿波罗STM32F767开发板简介
1)        ALIENTEK阿波罗STM32F767开发板
ALIENTEK阿波罗STM32F767开发板是采用核心板+底板的形式,只需一块底板,就兼容STM32F4和STM32F7两者使用。方便企业同时开发两款芯片的项目。
2)        底板资源

低板资源

低板资源

丰富的底板资源把STM32F767内部资源发挥到极致,基本所有STM32F767的内部资源,都可以在此开发板上验证。
3)        核心板资源

核心板资源

核心板资源

更具体的介绍,请查阅正点原子的光盘A盘资料。
4)        STM32F767芯片介绍
STM32F767采用Cortex-M7内核的一款高性能嵌入式处理。
Cortex-M7处理器是一种高效的高性能嵌入式处理器,具有低中断延迟,低成本调试,并且与现有Cortex-M配置文件处理器具有向后兼容性。处理器具有有序超标量流水线,这意味着许多指令可以双重发布,包括由于多个存储器接口而导致的加载/加载和加载/存储指令对。
处理器支持的内存接口包括:
l  紧耦合存储器TCM接口
l  哈弗指令和数据缓存以及AXI主控(AXIM)接口
l  专用的低延迟AHB-Lite外设(AHBP)接口
l  AHB-Lite从栈(AHBS)接口,提供对TCM的DMA访问。
处理器具有可选的内存保护单元(MPU),您可以将其配置为保护内存区域。用于错误检测和纠正的错误纠正代码(ECC)功能在实现时包含在数据和指令高速缓存中。 TCM接口支持外部ECC的实现,以提高可靠性并解决与安全相关的应用。
Cortex-M7处理器包括可选的浮点算术功能,支持单精度和双精度算术。
该处理器适用于需要快速中断响应功能的高性能,深度嵌入式应用。
二.  STM32F767内部结构
1.        系统结构

STM32F7内部结构

STM32F7内部结构
主系统架构基于2个子系统:
l  AXI到多AHB桥将AXI4协议转换为AHB-Lite协议:
n  1x AXI至64位AHB桥连接到嵌入式闪存
n  3x AXI至32位AHB桥连接到AHB总线矩阵
l  多AHB总线矩阵
多AHB总线矩阵互连所有主站和从站,它包括:
l  32位多AHB总线矩阵
l  64位多AHB总线矩阵:它将64位AHB总线从CPU通过AXI连接到AHB桥接器,32位AHB总线从GP DMA和外设DMA上升到64位到内部闪存。
多AHB总线矩阵互连:
l  12 个主总线
n  3x32位AHB总线Cortex®-M7 AXI主总线64位,通过AXI到AHB桥分裂4个主机。
n  1x64位AHB总线连接到嵌入式闪存
n  Cortex®-M7 AHB外设总线
n  DMA1内存总线
n  DMA2内存总线
n  DMA2外设总线
n  以太网DMA总线
n  USB OTG HS DMA总线
n  LCD控制器DMA总线
n  Chrom-Art Accelerator™(DMA2D)内存总线
l  八个从总线
n  AHB总线上的嵌入式Flash(用于Flash读/写访问,用于代码执行和数据访问)
n  Cortex®-M7 AHBS从接口,仅用于DTCM RAM上的DMA数据传输
n  主内部SRAM1(368 KB)
n  辅助内部SRAM2(16 KB)
n  AHB1外围设备包括AHB到APB桥和APB外围设备
n  AHB2外设
n  FMC
n  四通道SPI
2.        时钟体系

STM32F7时钟体系

STM32F7时钟体系
STM32F7中,有5个重要的时钟源,为HSI、HSE、LSI、LSE、PLL。其中PLL实际是分为三个时钟源,分别为主PLL和I2S部分专用PLLI2S和SAI部分专用PLLSAI。
l  LSI是低速内部时钟,RC振荡器,频率32kHz左右。LSI主要可以作为IWDG独立看门狗时钟,LPTimer低功耗定时器时钟以及RTC时钟。
l  LSE是低速外部时钟,接频率为32.768kHz的石英晶体。这个主要是RTC的时钟源。
l  HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz。阿波罗STM32F7开发板接的是25MHz外部晶振。HSE可以直接作为系统时钟或者PLL输入时钟,同时它经过2~31分频后也可以作为RTC时钟。
l  HIS是高速内部时钟,RC振荡器,频率为16MHz。可以直接作为系统时钟或者用作PLL输入,同时他经过488分频之后也可以作为HDMI-CEC时钟。
l  PLL为锁相环倍频输出。STM32F7有三个PLL:
n  主PLL有HSE或者HIS提供时钟信号,并具有两个不同的输出时钟。
n  第一个专用PLL(PLLI2S)用于生成精确时钟,在I2S、SAI和SPDIFRX上实现高品质音频性能。
n  第二个专用PLL(PLLSAI)用于为SAI接口生成时钟,生成LCD-TFT时钟以及可供USB OTGFS 、SDMMC和RNG选择的48MHz时钟。
三.  点亮LED实验
1.        LED是怎样接的GPIO口的

LED与GPIO连接1

LED与GPIO连接1

LED与GPIO连接2

LED与GPIO连接2
由原理图可知:
         LED0<-------------------------------------> PB1
         LED1 <-------------------------------------> PB0
2.        LED是什么电平驱动的
LED0接GPIO口,另一端接发光二极管,再限流电阻,最后接VCC。LED是低电平驱动。
3.        怎么设置GPIO的模块,状态(上下拉、推挽、读取数据速度)
1)        定义GPIO口使用GPIO_InitTypeDef结构体
  
typedef struct
  
{
  
uint32_t Pin;       /*指定要配置的GPIO引脚。此参数可以是@ref GPIO_pins_define的任何值*/
  
uint32_t Mode;      /*指定所选引脚的操作模式。此参数可以是@ref  GPIO_mode_define的值*/
  
uint32_t Pull;      /*指定所选引脚的上拉或下拉激活。此参数可以是@ref GPIO_pull_define*/
  
uint32_t Speed;     /*指定所选引脚的速度。此参数可以是@ref  GPIO_speed_define的值*/
  
uint32_t Alternate;  /*外围设备连接到所选引脚。此参数可以是@ref  GPIO_Alternate_function_selection的值*/
  
}GPIO_InitTypeDef;
  

  
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1;  //PB0,1
  
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
  
GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
  
GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
  
HAL_GPIO_Init(GPIOB,&GPIO_Initure);     //初始化GPIOB.0GPIOB.1
  
                   这实例采用HAL库开发并不是像51一样使用寄存器开发。
                   备注:
                   HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);
                   GPIO_TypeDef  *GPIOxGPIO相关的寄存器
                   typedefstruct
{
  __IO uint32_t MODER;    /*GPIO模式寄存器            Address offset: 0x00      */
  __IO uint32_t OTYPER;   /*GPIO输出类型寄存器         Address offset: 0x04      */
  __IO uint32_t OSPEEDR;  /*GPIO输出速度寄存器         Address offset: 0x08      */
  __IO uint32_t PUPDR;    /*GPIO输出上下拉寄存器         Address offset: 0x0C      */
  __IO uint32_t IDR;      /*GPIO输入数据寄存器         Address offset: 0x10      */
  __IO uint32_t ODR;      /*GPIO输出数据寄存器         Address offset: 0x14      */
  __IO uint32_t BSRR;     /*GPIO位设置,复位寄存器     Address offset: 0x18      */
  __IO uint32_t LCKR;     /*GPIO配置锁寄存器           Address offset: 0x1C      */
  __IO uint32_t AFR[2];   /*GPIO外围设备连接引脚功能寄存器 Addressoffset: 0x20-0x24 */
} GPIO_TypeDef;
2)        assert_param();该宏检查参数
3)        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);设置PB1清0
4.        开启哪个总线上的时钟
__HAL_RCC_GPIOB_CLK_ENABLE();                         //开启GPIOB时钟
该宏的定义:
#define__HAL_RCC_GPIOB_CLK_ENABLE()  
do {
     __IOuint32_t tmpreg;
SET_BIT(RCC->AHB1ENR,RCC_AHB1ENR_GPIOBEN);
     /* Delay after an RCC peripheral clockenabling */
     tmpreg = READ_BIT(RCC->AHB1ENR,RCC_AHB1ENR_GPIOBEN);
     UNUSED(tmpreg);
       } while(0)
使用do-while循环语句,不管while成立不成立,循环体都会执行一次。
四.  总结
STM32F767内部资源很丰富,待后续使用更多内部功能。
我要点赞 0

举报

您需要登录后才可以回帖 登录 | 立即注册