本帖最后由 smallcsduck 于 2018-4-16 22:35 编辑 * f) W0 m7 @9 e" }7 R 前一段时间拿到了ST官方的STM32L4R9AI discovery开发板研究了一下。可能是刚出的板子,资料比较少,STM32cubeMX附带的例程也非常少。很多功能没有做demo,那就来慢慢给他补上吧。要达到的目标不是能跑起来就行了,要能发挥最大的性能和全部的功能。 这篇就来讲一下开发板板载的型号为IS66WV1M16EBLL的PSRAM初始化时序设置。 ( e; k9 f" I0 R& z9 W 首先是MCU主频是设置在120M。$ X6 L( p. R( S8 q PSRAM的FMC接口设置。( R2 D4 [; e6 L* r% B; g0 D 时序设置。% \0 w& _6 L( a. V% c R2 y 下面是寄存器设置,可以直接在SystemInit里初始化PSRAM。 __IO uint32_t tmp = 0x00;% }- O4 \7 s" [* M $ M/ @7 Y$ ? K0 I" M7 A /*-- GPIOs Configuration -----------------------------------------------------*/ /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ RCC->AHB2ENR |= 0x000001FF; /* Delay after an RCC peripheral clock enabling */8 e v" P$ _: [7 k+ Y3 J) i1 X tmp = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_GPIODEN); /* Connect PDx pins to FMC Alternate function */ @7 o* {7 q0 `5 z3 O GPIOD->AFR[0] = 0xC0CC00CC; GPIOD->AFR[1] = 0xCCCCCCCC; /* Configure PDx pins in Alternate function mode */ & c6 C/ W1 A0 T1 {' r1 _) ]7 h8 [ GPIOD->MODER = 0xAAAABAFA; /* Configure PDx pins speed to 100 MHz */ GPIOD->OSPEEDR = 0xFFFFCF0F; /* Configure PDx pins Output type to push-pull */ GPIOD->OTYPER = 0x00000000; /* No pull-up, pull-down for PDx pins */ GPIOD->PUPDR = 0x00000000; /* Connect PEx pins to FMC Alternate function */7 N4 t8 _+ T F. N. ]6 U6 n0 l GPIOE->AFR[0] = 0xC000C0CC;5 f8 c" b8 q* m1 D. J# K GPIOE->AFR[1] = 0xCCCCCCCC; /* Configure PEx pins in Alternate function mode */ - s* O* h/ T1 D GPIOE->MODER = 0xAAAABFBA; /* Configure PEx pins speed to 100 MHz */ GPIOE->OSPEEDR = 0xFFFFC0CF; /* Configure PEx pins Output type to push-pull */ GPIOE->OTYPER = 0x00000000; /* No pull-up, pull-down for PEx pins */ GPIOE->PUPDR = 0x00000000; . D k' ?3 {. k& ?/ O5 Z! E2 L$ X" R /* Connect PFx pins to FMC Alternate function */( f% S1 Q& D/ ]7 A9 S GPIOF->AFR[0] = 0x00CCCCCC;* r+ y9 Z1 y( k/ d. m, P GPIOF->AFR[1] = 0xCCCC0000; /* Configure PFx pins in Alternate function mode */ 6 O2 N* P% k+ N& ?6 C7 ?# h GPIOF->MODER = 0xAAFFFAAA;! q! U! e/ W# m) E& l* [' F) ] /* Configure PFx pins speed to 100 MHz */ GPIOF->OSPEEDR = 0xFF000FFF; /* Configure PFx pins Output type to push-pull */ GPIOF->OTYPER = 0x00000000;1 z `1 @6 o+ ?3 H5 W8 q) t7 H2 V /* No pull-up, pull-down for PFx pins */ ; v$ F+ t7 ~/ c) ] GPIOF->PUPDR = 0x00000000; /* Connect PGx pins to FMC Alternate function */ GPIOG->AFR[0] = 0x00CCCCCC; GPIOG->AFR[1] = 0x00000000;+ D: X3 V' W$ K! i6 u h* c- I3 E /* Configure PGx pins in Alternate function mode */ GPIOG->MODER = 0xFFFFFAAA; /* Configure PGx pins speed to 100 MHz */ GPIOG->OSPEEDR = 0x00000FFF;% W& d0 t. [0 k /* Configure PGx pins Output type to push-pull */ GPIOG->OTYPER = 0x00000000; /* No pull-up, pull-down for PGx pins */ GPIOG->PUPDR = 0x00000000;) Y0 E8 i! ^2 R " g. q) h% @. g! ^ /*-- FMC/FSMC Configuration --------------------------------------------------*/7 A( i1 ~# y- { /* Enable the FMC/FSMC interface clock */ RCC->AHB3ENR |= 0x00000001; /* Delay after an RCC peripheral clock enabling */ tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); /* Configure and enable Bank1_SRAM1 */9 e# `4 \8 \3 A3 L- A FMC_Bank1_R->BTCR[0] = 0x00005095;# }5 z$ w8 k3 M9 b4 o FMC_Bank1_R->BTCR[1] = 0x4FF104F3; FMC_Bank1E_R->BWTR[1] = 0x0FF103F3; 项目代码地址在http://github.com/babycheng/STM32L4R9AIDISCOVERY.git。研究好了的代码会及时推送上去。2 w# e7 W6 n- K( g* m) L 项目使用 Arm Compiler 6.9 工具链,调试工具是开发板上集成的STLINK。使用MDK编译以后直接进debug模式运行。程序在SRAM1里面运行。烧进flash运行没有设置。. d, G3 E/ {6 H2 y1 r0 t! ~ 本人水平有限,以上如有错误之处,敬请指出。% e* z5 u& u8 }/ @ 转载请注明出处http://smallcsduck.blog.163.com % X" V6 L3 ?- k% \5 R7 n/ c 5 C4 t6 N7 S+ I5 I$ p6 h & K4 ~/ b" l& e0 T : ^. G9 R# S6 a - z& l* a' g5 U9 g4 s& P |
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html