STM32【HAL库】使用外部SRAM程序_全球热消息
【资料图】
#include #ifdef BSP_USING_SRAM#include #include #include #define DBG_TAG "drv_exsram"#define DBG_LVL DBG_LOG#include #define RAM_HEAP_EX_START (0x68000000)#define RAM_HEAP_EX_SIZE (1024 * 1024)#define RAM_HEAP_EX_END (RAM_HEAP_EX_START + RAM_HEAP_EX_SIZE)/* 注意:SRAM 句柄不能为局部变量 */SRAM_HandleTypeDef SRAM_Handler; // SRAM句柄#ifdef RT_USING_MEMHEAP_AS_HEAPstatic struct rt_memheap system_heap;#endif/** * @brief SRAM 初始化 * @retval None */static int system_sram_init(void){int result = RT_EOK; FSMC_NORSRAM_TimingTypeDef FSMC_ReadWriteTim; /*----------------------------------------- 使能时钟 -----------------------------------------*/ __HAL_RCC_GPIOD_CLK_ENABLE(); // 使能GPIOD时钟 __HAL_RCC_GPIOE_CLK_ENABLE(); // 使能GPIOE时钟 __HAL_RCC_GPIOF_CLK_ENABLE(); // 使能GPIOF时钟 __HAL_RCC_GPIOG_CLK_ENABLE(); // 使能GPIOG时钟 /*----------------------------------------- 配置 SRAM -----------------------------------------*/ SRAM_Handler.Instance = FSMC_NORSRAM_DEVICE; SRAM_Handler.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; SRAM_Handler.Init.NSBank = FSMC_NORSRAM_BANK3; // 使用NE3 SRAM_Handler.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; // 地址/数据线不复用 SRAM_Handler.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; // SRAM SRAM_Handler.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16; // 16位数据宽度 SRAM_Handler.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE; // 是否使能突发访问,仅对同步突发存储器有效,此处未用到 SRAM_Handler.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; // 等待信号的极性,仅在突发模式访问下有用 SRAM_Handler.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; // 存储器是在等待周期之前的一个时钟周期还是等待周期期间使能NWAIT SRAM_Handler.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; // 存储器写使能 SRAM_Handler.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; // 等待使能位,此处未用到 SRAM_Handler.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE; // 读写使用相同的时序 SRAM_Handler.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; // 是否使能同步传输模式下的等待信号,此处未用到 SRAM_Handler.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE; // 禁止突发写 /*----------------------------------------- FSMC 读写时序控制 -----------------------------------------*/ FSMC_ReadWriteTim.AddressSetupTime = 0x00; // 地址建立时间(ADDSET)为1个HCLK 1/72M = 13.8ns FSMC_ReadWriteTim.AddressHoldTime = 0x00; // 地址保持时间(ADDHLD)模式A未用到 FSMC_ReadWriteTim.DataSetupTime = 0x03; // 数据保存时间为3个HCLK = 4*13.8 = 55ns FSMC_ReadWriteTim.BusTurnAroundDuration = 0X00; FSMC_ReadWriteTim.CLKDivision = 0X00; FSMC_ReadWriteTim.DataLatency = 0X00; FSMC_ReadWriteTim.AccessMode = FSMC_ACCESS_MODE_A; // 模式A if (HAL_SRAM_Init(&SRAM_Handler, &FSMC_ReadWriteTim, &FSMC_ReadWriteTim) != HAL_OK){LOG_E("SDRAM init failed!"); result = -RT_ERROR;}else {#ifdef RT_USING_MEMHEAP_AS_HEAP /* If RT_USING_MEMHEAP_AS_HEAP is enabled, SDRAM is initialized to the heap */rt_memheap_init(&system_heap, "sdram", (void *)RAM_HEAP_EX_START, RAM_HEAP_EX_SIZE);#else rt_system_heap_init((void *)RAM_HEAP_EX_START, (void *)RAM_HEAP_EX_END);#endif }return result;}INIT_BOARD_EXPORT(system_sram_init);#endif /* BSP_USING_SRAM */ 调用时 HAL_SRAM_Init 需要使用 stm32f1xx_hal_sram.c 文件和 stm32f1xx_ll_fsmc.c 文件,并且需要在 stm32f1xx_hal_msp.c 文件中完成相应的引脚使能,代码如下所示:
static uint32_t FSMC_Initialized = 0;static void HAL_FSMC_MspInit(void){ /* USER CODE BEGIN FSMC_MspInit 0 */ /* USER CODE END FSMC_MspInit 0 */ GPIO_InitTypeDef GPIO_InitStruct ={0}; if (FSMC_Initialized) { return; } FSMC_Initialized = 1; /* Peripheral clock enable */ __HAL_RCC_FSMC_CLK_ENABLE(); /** FSMC GPIO Configuration PF0 ------> FSMC_A0 PF1 ------> FSMC_A1 PF2 ------> FSMC_A2 PF3 ------> FSMC_A3 PF4 ------> FSMC_A4 PF5 ------> FSMC_A5 PF12 ------> FSMC_A6 PF13 ------> FSMC_A7 PF14 ------> FSMC_A8 PF15 ------> FSMC_A9 PG0 ------> FSMC_A10 PG1 ------> FSMC_A11 PE7 ------> FSMC_D4 PE8 ------> FSMC_D5 PE9 ------> FSMC_D6 PE10 ------> FSMC_D7 PE11 ------> FSMC_D8 PE12 ------> FSMC_D9 PE13 ------> FSMC_D10 PE14 ------> FSMC_D11 PE15 ------> FSMC_D12 PD8 ------> FSMC_D13 PD9 ------> FSMC_D14 PD10 ------> FSMC_D15 PD11 ------> FSMC_A16 PD12 ------> FSMC_A17 PD13 ------> FSMC_A18 PD14 ------> FSMC_D0 PD15 ------> FSMC_D1 PG2 ------> FSMC_A12 PG3 ------> FSMC_A13 PG4 ------> FSMC_A14 PG5 ------> FSMC_A15 PD0 ------> FSMC_D2 PD1 ------> FSMC_D3 PD4 ------> FSMC_NOE PD5 ------> FSMC_NWE PG10 ------> FSMC_NE3 PE0 ------> FSMC_NBL0 PE1 ------> FSMC_NBL1 */ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_12|GPIO_PIN_13 |GPIO_PIN_14|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15 |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /* USER CODE BEGIN FSMC_MspInit 1 */ /* USER CODE END FSMC_MspInit 1 */}void HAL_SRAM_MspInit(SRAM_HandleTypeDef* hsram){ /* USER CODE BEGIN SRAM_MspInit 0 */ /* USER CODE END SRAM_MspInit 0 */ HAL_FSMC_MspInit(); /* USER CODE BEGIN SRAM_MspInit 1 */ /* USER CODE END SRAM_MspInit 1 */}static uint32_t FSMC_DeInitialized = 0;static void HAL_FSMC_MspDeInit(void){ /* USER CODE BEGIN FSMC_MspDeInit 0 */ /* USER CODE END FSMC_MspDeInit 0 */ if (FSMC_DeInitialized) { return; } FSMC_DeInitialized = 1; /* Peripheral clock enable */ __HAL_RCC_FSMC_CLK_DISABLE(); /** FSMC GPIO Configuration PF0 ------> FSMC_A0 PF1 ------> FSMC_A1 PF2 ------> FSMC_A2 PF3 ------> FSMC_A3 PF4 ------> FSMC_A4 PF5 ------> FSMC_A5 PF12 ------> FSMC_A6 PF13 ------> FSMC_A7 PF14 ------> FSMC_A8 PF15 ------> FSMC_A9 PG0 ------> FSMC_A10 PG1 ------> FSMC_A11 PE7 ------> FSMC_D4 PE8 ------> FSMC_D5 PE9 ------> FSMC_D6 PE10 ------> FSMC_D7 PE11 ------> FSMC_D8 PE12 ------> FSMC_D9 PE13 ------> FSMC_D10 PE14 ------> FSMC_D11 PE15 ------> FSMC_D12 PD8 ------> FSMC_D13 PD9 ------> FSMC_D14 PD10 ------> FSMC_D15 PD11 ------> FSMC_A16 PD12 ------> FSMC_A17 PD13 ------> FSMC_A18 PD14 ------> FSMC_D0 PD15 ------> FSMC_D1 PG2 ------> FSMC_A12 PG3 ------> FSMC_A13 PG4 ------> FSMC_A14 PG5 ------> FSMC_A15 PD0 ------> FSMC_D2 PD1 ------> FSMC_D3 PD4 ------> FSMC_NOE PD5 ------> FSMC_NWE PG10 ------> FSMC_NE3 PE0 ------> FSMC_NBL0 PE1 ------> FSMC_NBL1 */ HAL_GPIO_DeInit(GPIOF, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_12|GPIO_PIN_13 |GPIO_PIN_14|GPIO_PIN_15); HAL_GPIO_DeInit(GPIOG, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10); HAL_GPIO_DeInit(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1); HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11 |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15 |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5); /* USER CODE BEGIN FSMC_MspDeInit 1 */ /* USER CODE END FSMC_MspDeInit 1 */}void HAL_SRAM_MspDeInit(SRAM_HandleTypeDef* hsram){ /* USER CODE BEGIN SRAM_MspDeInit 0 */ /* USER CODE END SRAM_MspDeInit 0 */ HAL_FSMC_MspDeInit(); /* USER CODE BEGIN SRAM_MspDeInit 1 */ /* USER CODE END SRAM_MspDeInit 1 */}
标签:
为您推荐
广告
随机阅读
- STM32【HAL库】使用外部SRAM程序_全球热消息
- 9月超20.8GW光伏项目开工_世界微速讯
- 当前信息:倒计时100天!河南省第十四届运动会暨第八届残疾人运动会官宣
- 武汉:万吨转体桥成功转体 焦点快播
- 2023年“5·18国际博物馆日”中国主会场活动将在福建博物院举行-环球最资讯
- 百润股份:目前公司相关产品销售良好,预调鸡尾酒业务行业成长空间较大
- 申请停息挂账的条件是什么?停息挂账容易申请吗
- 世界观速讯丨年终奖如何合理避税年终奖盲区_年终奖如何合理避税
- 另一个伊甸as猫可可 另一个伊甸as猫可可技能介绍
- 溢多利完成回购2.22%公司股份 耗资逾1亿元 天天消息
- 南阳:小吃街点燃“夜经济”
- 今日要闻!代表性产品业绩名列前茅 海富通基金科技成长团队彰显硬核实力
- 环球快播:A股异动 | 诺诚健华涨8% 一季度营收同比增59%
- 佛山市召开重点项目建设工作推进会|每日焦点
- 河南省教育厅办公室关于公布2022年度教育数字化转型优秀案例的通知
- 每日热闻!蛋糕卷要冷藏多久定型 蛋糕卷要等完全冷却在卷吗
- 焦点热文:aubade是什么档次(aub是什么牌子)
- 打卡古都西安的文化地标——大雁塔_当前快报
- 【天天报资讯】APP小程序“安全隐私协议”太霸道
- 音频丨格隆汇5.10盘前要点—港A美股你需要关注的大事都在这 环球报道
- 1新动态:这一场,三日绕梁
- 2白菜猪肉炖粉条的做法是?|世界时快讯
- 3涉及多所学校,南昌两地发布学位预警
- 4含山:“五个加快”驶入科技创新“快车道”_天天播资讯
- 501.《巨齿鲨2》首曝预告
- 6腋窝下有疙瘩挂什么科_腋窝下有疙瘩按会疼
- 7【环球热闻】2022 年 NFL 选秀中哪一位顶级角卫适合老鹰队的计划
- 8完善云服务领域布局,中青宝拟收购广州宝云
- 9天天新消息丨中国星辰丨把梦想送上月球
- 10世界热门:红豆股份: 红豆股份关于向特定对象发行股票证券募集说明书等申请文件财务数据更新的提示性公告
- 1创新服务模式 助力乡村振兴
- 2*ST新联连续三个交易日内收盘价格跌幅偏离值累计超过12%-环球时讯
- 3最新快讯!小米电视出货量中国第一:4月出货65万台、同比增长19%
- 4【韩系动向979】新老车型对比,伊兰特中期改款你打几分?-天天简讯
- 5热点聚焦:qq有借钱功能吗 qq可以借钱吗
- 6世界观点:dnf循环封号1天_dnf循环封号5天解除
- 7新四军苏浙军区旧址_关于新四军苏浙军区旧址简介 全球报资讯
- 8环球聚焦:迈普医学(301033)5月9日主力资金净卖出210.22万元
- 9天天最资讯丨肖丹:让困境儿童拥有快乐童年,是我最大的愿望
- 10国家统计局:2022年全国规模以上企业就业人员年平均工资为92492元 比上年名义增长5%
广告
财经
- 今日热议:22.64万人参加广西2023年设区市以下事业单位公开招聘笔试
- 涉及欺骗误导强迫用户,《羊了个羊》被通报
- 【一线调研】一家小微科创企业的首贷之路_全球焦点
- 天天快报!杨幂解约 “后备上市企业名单”上的嘉行传媒走到十字路口
- 中超第6轮武汉三镇客战河南队_当前快播
- ETF观察丨消费电子板块走强,传音控股市值突破千亿,信息技术ETF(159939)涨超1%
- 【世界独家】K联赛首尔FCvs光州FC比分预测最新分析 主队信心十足
- 环球焦点!中消协一季度受理投诉超30万件 为消费者挽回经济损失24639万元
- 精准信息:5月8日融资净买入205.72万元,连续3日累计净买入375.37万元
- 金价“越等越贵” 今年还要“狂飙”数百美元?-焦点速讯
- 媒体人:新赛季亚冠外援注册人数不受限制,将对中超联赛产生影响
- 财经早班车丨第十四届陆家嘴论坛(2023)将于6月8日至9日在上海举行
- 祥符区全力推进黄河滩区居民迁建后续发展产业就业帮扶工作 世界快播
- 中宠股份:证券事务代表逄建毅辞职
- 速递!智通ADR统计 | 5月9日
- 血管堵不堵,站起来走一走就能知道!小心这6个信号!|当前焦点
- 人这一生为了啥原唱dj_人这一生为了啥_环球焦点
- 饭后玩的小游戏_饭后小游戏有哪些
- 全球即时看!德云三宝是谁的徒弟-德云三宝是谁
- 期货市场没有安逸和稳定?|聚看点
