在一般情况下stm32内部sram是足够使用的 MDK配置如下
但是有些时候内存是不够用的,比如用到ucgui的时候或者做大项目时就需要外扩sram,倘若你要把外部sram作为运行内存则可以做如下配置:
另外一种方法就是自己写malloc函数,正点原子的内存管理函数可以借鉴一下:
__align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000))); //外部SRAM内存池
这段代码中的_attribute_ 是定位的具体位置的意思,本例中是定位到0x68000000地址;查看一下数据手册地址映射图看一下外扩地址范围,起始地址确实是0x68000000
关键字:stm32 外扩外部sram MDK配置
引用地址:
stm32外扩外部sram学习笔记
推荐阅读最新更新时间:2024-11-11 22:54
如何创建硬件在环工程
我们很多时候使用的STM32单片机型号无法与官方硬件支持包自带的型号一一对应上,而matlab 2021b版至最新版本可以支持 F4xx系列单片机+CubeMX自定义型号配置使用,本篇以“STM32F407VGT6”型号为例如何创建硬件在环工程 温馨提示 :2021b版本Matlab只支持F4xx以上型号使用CubeMx自定义配置功能,而F4xx以下(F1x、F0x等)则只能使用官方开发板支持包方式开发。 CubeMX版本 :6.2.0 Matlab版本 :2021b STM32CubeProgrammer版本 :2.6.0 3.0 软件版本验证 创建simulink模型前需要先检查下硬件支持包和相关软件是否安装正确,
[单片机]
stm32 TIM3_CH1 PB4复用输出PWM 完整配置源码
stm32F103使用定时器3配置PB4引脚产生1KHz的PWM波 引脚配置 void TIM3_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); GPIO_InitStructure.GPI
[单片机]
STM32在IAR指定文件(函数)首地址
有时候,我们会遇到一些情况,要把某些数组定义在某个固定的区域,或者指定某个函数的首地址。 例如,有两个文件,main.c和sendpc.c,要把sendpc.c放在0x08001200位置,把main.c放在0x08000800位置。 以IAR540为例,在stm32f10x_flash.icf文件里,加入以下两句: place at address mem:0x08000800 { section .text object sendpc.o }; place at address mem:0x08001200 { section .text object main.o }; 编译后可在map文件中查看
[单片机]
stm32 ADC知识总结(二)
关于STM32的ADC的一些重要特点需要记住: 1)STM32F103系列至少有2个ADC,这些ADC可以独立使用,也可以使用双重模式(提高采样率); 2)STM32的ADC是12位逐次逼近型的模数转换器,一共有18个通道,可以测量16个外部信号和2个内部信号源; 3)每个通道的ADC可以在单次、连续、扫描或者间断模式下进行; 4)前面讲过STM32的ADC是12位的,结果存储在16位的数据寄存器中,有4位用不到,所以ADC存在左对齐或右对齐的方式; 5)模拟看门狗允许应用程序检测输入电压是否超出用户定义的高低阈值; 6)STM32的ADC最大的转换速率为1MHz,也就是说最快转换时间为1us,为了保证ADC转换结果的
[单片机]
STM32之CAN总线例程
#include stm32f10x.h /* RCC时钟配置 */ void RCC_config(void) { ErrorStatus HSEStartUpStatus; /* RCC寄存器设置为默认配置 */ RCC_DeInit(); /* 打开外部高速时钟 */ RCC_HSEConfig(RCC_HSE_ON); /* 等待外部高速时钟稳定 */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { /* 设置HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYS
[单片机]
实现STM32的串口数据发送和printf函数重定向
简介:在调试电机驱动程序的时候,是不能随便利用中断来进行一些寄存器或数据的查看的,不然你在运行的时候突然来一下,如果占空比大的话那可能直接就把MOS管给烧了,所以我们很多情况下只能使用USART(串口)来进行程序的调试和数据的监控了。 对于STM32来说,由于很多内容都是有库来实现的,那就省了很多时间,直接看个例子就可以写了,大致有4步步骤: 1 1、RCC始终初始化,对端口和USARTX使能时钟 2 2、初始化端口功能,RX设置为输入悬空,TX设置为复用功能的推挽输出,注意GPIO_SPEED要设置下,我没设置弄了半天都没输出 3 3、设置USARTX寄存器,波特率、数据位、校验位、停止位等 4 4、看需要是否开中断,我
[单片机]
STM32初学笔记1之RCC(下)
前面写过一篇文章: STM32初学笔记之RCC(1) ,在这一篇文章中介绍了系统时钟的设置的几个函数,刚刚突然想追踪SystemInit()的时候才发现,原来我写的这个所谓的RCC_ClkConfig.C和RCC_ClkConfig.H文件一点用处都没有,因为这个在库源文件system_stm32f10x.c中全部都有,而且比我的那个好用很多,所以,哎,我有百忙了。下面就具体显示一下我的这个函数追踪过程吧。 1、首先在主函数中添加一下一条语句: 2、将光标移动到SystemInit()函数上,单击右键,选择 go to the definition of 'SystemInit' 3、我们可以看到这个函
[单片机]
stm32 mmc卡扫描指定文件夹下的所有文件 串口输出(文件名长度有限制)
硬件环境:神州一号开发板 软件环境:mdk 1、sd卡初始化 2、f_mount 3、扫描函数如下: #define _USE_LFN 0 FRESULT scan_files (char* path) { FRESULT res; FILINFO fno; DIR dir; int i; char *fn; #if _USE_LFN static char lfn ; fno.lfname = lfn; fno.lfsize = sizeof(lfn); #endif res = f_opendir(&dir, path); if (res == FR_OK) { i = strl
[单片机]