|
新手学STMF4xx,参考STM32F429I-Discovery开发板V1.0.1示例FMC_SDRAM使用汇编编写SDRAM驱动,调试2天最终发现示例一处问题,如不仔细看源码,很可能会误导和我一样的新手……% x/ [; \, ?3 O1 @ + l8 e: o2 _- k& o. G0 E 示例:% e: c' R9 ]" k2 i- q d 源文件:stm32f429i_discovery_sdram.c 错误:void SDRAM_GPIOConfig(void)/ ~0 s9 ]4 c# _ {* O* c, G 对比下文两处红色字体所示内容。 /*-- GPIOs Configuration -----------------------------------------------------*/ /*% O- `5 M- _, M% ~* K' k +-------------------+--------------------+--------------------+--------------------+ + SDRAM pins assignment + +-------------------+--------------------+--------------------+--------------------+ | PD0 <-> FMC_D2 | PE0 <-> FMC_NBL0 | PF0 <-> FMC_A0 | PG0 <-> FMC_A10 | | PD1 <-> FMC_D3 | PE1 <-> FMC_NBL1 | PF1 <-> FMC_A1 | PG1 <-> FMC_A11 |# Q$ c% ~! g+ i" j | PD8 <-> FMC_D13 | PE7 <-> FMC_D4 | PF2 <-> FMC_A2 | PG8 <-> FMC_SDCLK | | PD9 <-> FMC_D14 | PE8 <-> FMC_D5 | PF3 <-> FMC_A3 | PG15 <-> FMC_NCAS | j4 _" H, p9 `+ Z: G- C | PD10 <-> FMC_D15 | PE9 <-> FMC_D6 | PF4 <-> FMC_A4 |--------------------+ | PD14 <-> FMC_D0 | PE10 <-> FMC_D7 | PF5 <-> FMC_A5 | | PD15 <-> FMC_D1 | PE11 <-> FMC_D8 | PF11 <-> FMC_NRAS | +-------------------| PE12 <-> FMC_D9 | PF12 <-> FMC_A6 | 9 w d$ c' d0 @3 O% | | PE13 <-> FMC_D10 | PF13 <-> FMC_A7 | ( h' Y& J$ {1 U; m& U, p+ ~ | PE14 <-> FMC_D11 | PF14 <-> FMC_A8 | | PE15 <-> FMC_D12 | PF15 <-> FMC_A9 | +-------------------+--------------------+--------------------+ | PB5 <-> FMC_SDCKE1| , s- T6 v3 v0 r$ _) Q: p | PB6 <-> FMC_SDNE1 | | PC0 <-> FMC_SDNWE | +-------------------+ ; F) Q2 z& b v, |( G / K5 \$ [8 n" B; U: \2 j */% Q" g6 p2 o: W i 。。。。。。9 `* a5 K2 h# F+ z # P5 ^ f3 L1 S0 c9 W /* GPIOG configuration */- _) k5 r x, s9 B' {# s4 P U5 x GPIO_PinAFConfig(GPIOG, GPIO_PinSource0 , GPIO_AF_FMC);/ K5 H* r* ]9 k* W$ o GPIO_PinAFConfig(GPIOG, GPIO_PinSource1 , GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource4 , GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource5 , GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource8 , GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource15 , GPIO_AF_FMC); & _) B' ]9 ^; n$ ` 更正: ; +-------------------+--------------------+--------------------+--------------------+. ~6 j% {7 Q) M ; + SDRAM pins assignment + ; +-------------------+--------------------+--------------------+--------------------+ ; | PD0 <-> FMC_D2 | PE0 <-> FMC_NBL0 | PF0 <-> FMC_A0 | PG0 <-> FMC_A10 |- J: i7 t# z: B ; | PD1 <-> FMC_D3 | PE1 <-> FMC_NBL1 | PF1 <-> FMC_A1 | PG1 <-> FMC_A11 | ; | PD8 <-> FMC_D13 | PE7 <-> FMC_D4 | PF2 <-> FMC_A2 | PG4 <-> FMC_BA0 |8 y' c- y2 @' \& b5 R ; | PD9 <-> FMC_D14 | PE8 <-> FMC_D5 | PF3 <-> FMC_A3 | PG5 <-> FMC_BA1 |% J% A& i. j9 @; h! v- {+ S ; | PD10 <-> FMC_D15 | PE9 <-> FMC_D6 | PF4 <-> FMC_A4 | PG8 <-> FMC_SDCLK |* B, s$ P% Q$ b+ ` p ; | PD14 <-> FMC_D0 | PE10 <-> FMC_D7 | PF5 <-> FMC_A5 | PG15 <-> FMC_NCAS | 3 |& g X( C. L ; | PD15 <-> FMC_D1 | PE11 <-> FMC_D8 | PF11 <-> FMC_NRAS |--------------------+ 4 P( J' Z9 h0 ?. t$ R; a/ s ; +-------------------| PE12 <-> FMC_D9 | PF12 <-> FMC_A6 | ) @- Q9 U/ P2 q* S# x ; | PE13 <-> FMC_D10 | PF13 <-> FMC_A7 | & x" \1 J8 q# E ; | PE14 <-> FMC_D11 | PF14 <-> FMC_A8 | ; | PE15 <-> FMC_D12 | PF15 <-> FMC_A9 |) e* h8 }/ Z. P5 T ; +-------------------+--------------------+--------------------+# D' Y+ T S* P7 S% K, d ]2 r ; | PB5 <-> FMC_SDCKE1| / C+ ?4 q- j9 e( p1 s1 B& A: p ; | PB6 <-> FMC_SDNE1 | ( W, T h/ G5 F% _4 C ; | PC0 <-> FMC_SDNWE |: Q( R1 O$ x, P5 S% m6 a* y/ D ; +-------------------+ |
| 赞个,其他童鞋验证下? |
| 这个还照搬? |
【福利三:雨露均沾·逢7狂欢】之四:用一个定时器同步另外两个定时器输出PWM
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
【逢7发帖赢大礼】全网最简单的Arduino_STM32开发环境搭建教程!
STM32F4中文用户手册
STM32F400、STM32F402 Cortex-M4超值单片机
SPI 高温读错最后一位?STM32F42xx 官方根治方案
微信公众号
手机版