STM32F4说是有192KRAM 但是很是很坑。192k分为两部分128k普通RAM和64K CCM RAM,CCM只能内核调用,外设无法使用。本来想着192KRAM挺好,结果仔细看悲剧了。但是也不能浪费,可以尝试使用它,把UCOS内核数据放到CCM。网上搜索到一个FreeRTOS的照着他的自己弄了弄。
1.勾选IARM2 确认使用CCM
此时编译程序后打开.map文件会发现使用了CCM但是没有数据定义到这块RAM。同时发现IRAM1内部关于UCOS的存储。
2.打开.sct文件添加如下图代码--UCOS_ii_IARM自己写的,把刚刚在IRAM1中看到的 os_core.o 和os_cpu_c.o文件添加到CCM。
修改MDK 不勾选USE Memory Layout from Targe Dialog,如下图。保存重新编译
这时打开.map文件会发现os_core.o 和os_cpu_c.o文件添加到了CCM。任然没有在CCM中定义数据啥的。
如果需要定义数据到CCM就需要修改.sct文件。比如我要在CCM定义20K数组存放图片则需要这样,首先定义数组并at起始地址
u8 g_nJPEGBuff[20*1024] __attribute__((at(0x10000000))) = {0,};
然后UCOS定义到CCM的数据位置也要相应的调整,这里我分配32K给数组用,32K给UCOS用那么.sct文件就需要修改成如下图所示
此时编译后打开.MAP文件就会看到有一个数据定义在了 RW_IRAM2即CCM中 尺寸是0x00005000也就是我们定义的20K数组占用的。而UCOS则定义到了0x10008000地址以后的空间。如下图
关键字:STM32F4 ucosii CCM
引用地址:
STM32F4 定义ucosii到CCM
推荐阅读最新更新时间:2024-03-16 16:25
STM32F4系列HAL库配置定时器实验——输入捕获
输入捕获简单讲解 输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量周期和频率为例,用一个简图来说明输入捕获的原理 假定定时器工作在向上计数模式, 图中 t1~t2 时间,就是我们需要测量的高电平时间。测量方法如下:首先设置定时器通道 x 为上升沿捕获,这样,t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。这样,根据定时器的计数频率,我们就可以算出 t1~t2 的时间,从而得到高电平脉宽。 在 t1~t2 之间,可能产生 N 次定时器溢出,这就要求我们对定时器溢出,做处理,防止高电平太长,导致数
[单片机]
stm32F205程序移植到stm32F405片子,使用FPU时注意事项
除了网上的教程外,还要特别注意,当运算中有浮点的数字时要把,数字后面加上一个f。例如表达式中有4.321参与运算。。当你不在4.321后加f时,stm32F405的片子不知道把他当做单精度float用FPU来运算,,默认可能是当做double来运算(我不确定),运算速度还是很慢。。切记所有浮点数字后面加上f,,,,有时候keil会提示warning: #1035-D: single-precision operand implicitly converted to double-precision 这句话的意思就是单精度运算隐式转换成了双精度运算了。这个时候就要在单精度数字后面加个f keilmdk的设置中完整的define是
[单片机]
STM32开发笔记59: STM32F407的启动模式
单片机型号:STM32F407VGT6 本文介绍STM32F407的启动模式,也称为BOOT模式。STM32F407可以有3种方式进行启动,见下表,我们一般采用从FLASH进行程序启动的方式,所以,对于一般的电路图只需将BOOT0引脚下拉到地,即可满足设计要求,而不需考虑BOOT1引脚。 不过,STM32内部还隐含着另外一种启动方式,如下列文字所述。其表述的思想是STM32在出厂时已内嵌bootloader程序,可以从USART1、USART3、CAN2和USB OTG FS进行启动。 这种启动模式,需将BOOT0设置为1,BOOT1设置为0。所以如果希望应用STM32的Bootloader功能,则需将BO
[单片机]
STM32F4中JTAG口复用
使用STM32F系列,会遇到将JTAG口复用为SPI1或直接用做普通IO。 针对于F1系列,需要先禁止使能 JTAG,然后将其复用为其他口或者普通IO。 针对F4系列,STM32F4库函数中,已经取消了GPIO_*PinRemapConfig()函数,对于复用功能使用GPIO*_PinAFConfig()函数了! 但是在GPIO_PinAFConfig()函数已经没有禁止JTAG/SW等选项了,而是复用到AF0~AF15线上,其中AF0是系统功能(也是复位初始功能)。 其中调试接口就是系统功能,这样需要禁用JTAG功能只需把引脚复用到AF1~AF15中的一个就行了。 直接复用就可使用相应的复用功能,不用想着失能JTAG了。 最好不
[单片机]
关于STM32F407ZGT6的一些知识小结及串口1程序
一、关于STM32F4在通过串口通信的时候乱码问题 1.刚开始弄得时候,以为和stm32一样配置完串口之后就可以用了,结果后面发现串口打印出来的东西全是乱码。后面发现是STM32F4的固件库中使用的频率是25Mhz,而板子上的外部晶振是8Mhz的。因此需要去固件库的stm32f4xx.h中把HSE_VALUE改成8Mhz就可以了。 2.还有一种问题是,如果使用的是电平转换的问题。要直接从芯片的引脚进行通信的话,可以直接用一个TTL下载器直接相连,如CH340;如果板子上带有MAX3232芯片的电平转换,要通过DB9插口线转RS232电平为TTL电平然后和电脑相连。 #include stm32f4xx.h #inclu
[单片机]
stm32f4开发板驱动LCD液晶屏的个人总结
研究了几天的F4的FSMC方式驱动触摸屏,得到一些认识,现在列举如下,流水帐般没有组织的记录仅供自己以后参考 使用的是一款叫微雪电子的F407的开发板,但是他们的客服却不太愿解答用户提出的问题。 触摸屏是以前购买火牛的时候带的一块LCD屏,屏上有HY32D字样,里面含有控制电路,相关硬件是SSD1289和ADS7843,SSD1289控制LCD,ADS7843通过SPI控制触摸屏。 配合开发板附带的测试代码,总是不明白FSMC的工作原理,因为没有看到如何选择哪个块,哪个区,而且硬件电路也没看很懂。 总结如下 1、NEx是四个块的第一块的4个区(每个64M)的选择信号,比如你选择FSMC_Bank1_NORSRAM4
[单片机]
stm32f4中通过dma采集adc
环境: 主机:WIN8 开发环境:MDK5.13 MCU:STM32F407IGH 源代码: drv_power.h /********************************************************************* * 电源模块驱动层头文件 * (c)copyright 2015,jdh * All Right Reserved *新建日期:2014/10/20 by jdh *修改时间:2015/3/2 by jdh *****************************************************************
[单片机]
STM32F407 ADC时钟设置及采样频率设置
/************************************************* 在system_stm32f4xx.c中有如下定义: /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N / / / #define PLL_M 8 #define PLL_N 336 /* SYSCLK = PLL_VCO / PLL_P // #define PLL_P 2 /* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ /// #define PLL_Q
[单片机]