STMCU小助手
发布时间:2022-1-1 20:00
|
我使用DMA进行SPI传输时发现无数据,还好有个逻辑分析仪,不然有没有信号都不知道; d8 m) H. Z6 A& W 这是总线访问权限的图。& `' x& B. E9 R8 P1 p0 \2 F “-”表示不能访问。“D”表示直接访问。其它的都是间接访问。 - ] H6 L) d" l* E! \
" }- V |2 O) H2 z
发现DMA1只有ITCM和DTCM不能访问,问题就出在这。0 w9 U5 K2 e- c( Q5 D 有句“TCM 接口上的 DTCM-RAM 映射到地址 0x2000 0000,可供 Cortex®-M7 访问......”。(M7是处理器核), z! O% \& H4 n / ?2 t8 ]2 ^, }; G7 ^5 u* {% b2 ^ j7 @% J 内存分布:, B, _0 f7 N9 O; P9 L3 L2 h. x DTCM-RAM(数据TCM RAM):起始地址:0x2000 0000,大小:0x20000(128KB)。 + `5 M6 U* q8 Y0 v9 U1 @ AXI SRAM(D1域):起始地址:0x24000000! i5 O6 b: ^# M2 k DTCM虽然和其它的MCU的RAM起始地址一样,但是无法被DMA访问。* _4 g! u( _+ ]( z 也就是通用RAM的地址变了,但是编译器还是会把DTCM的地址作为通用RAM的起始地址。7 z( a H6 y: Z' ?; x 5 m5 L; z s+ }+ |/ K
' Y5 S" J- l6 [5 y6 r ^6 E 使用DMA传输时把内存起始地址修改为D1域。也就是把勾打在RAM2上。这是最简单的解决方法。- U3 q( Y. A3 O6 v3 _ Makefile工程:6 z1 O5 j: ]9 U# ^+ v ( p( R! f' J, T9 e, @4 d1 E 在指定位置创建内存:" R) s" S7 P* ~$ P% f2 t; G; X 在ld文件中添加:. w9 p( g. m& @ u5 N- m) f .DisplayBuffer : //DisplayBuffer是名字# K& A+ ~4 _, W {undefined* `. l o# V' ^6 E7 o& p) k& _ *(.DisplayBuffer) } >RAM_D2 //RAM_D2是所在地 使用该内存:__attribute__((section(".DisplayBuffer"))) uint16_t DisplayBuffer[ScreenH][ScreenW];。5 l. k9 _: O% Z4 T 也可以直接指定地址:uint16_t DisplayBuffer[100][100] __attribute__((section(".ARM.__at_0x20000000")));。只能在bss段里,bss段所在的内存区域在ld文件里看,看最后指向哪个RAM区域。! {* o3 C+ q8 \6 \" P. e# u 只要变量不在DTCM里就行。 ( U' ~# B' V6 B. H. M: f |
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
【福利三:逢7发帖赢大礼】成功利用STM32H743VI片内SRAM12和DTCM空间(完全胜利)
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
【福利三:逢7发帖赢大礼】使用惠勤致远STM32H743VI开发板+ST7796并口彩屏移植LVGL9.5并分享一些额外内容
【 逢7发帖赢大礼】7、TouchGFX中实现云彩流动效果
微信公众号
手机版