IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> stm32f的一些问题 -> 正文阅读

[嵌入式]stm32f的一些问题

1、stm32cubemx如何修改芯片型号

cd? /cygdrive/d

vim stm32f103_xx.ioc

% s/STM32F103VETx/STM32F103ZET6/gc

然后重新双击:stm32f103_xx.ioc

2、stm32CubeMX-->点击:GENERATE CODE-->出现错误:but mdk-arm V5project generation have a problem

解决:(1)卸载原来的stm32CubeMX

(2)卸载jdk

(3)打开:STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics

选择5.6.0版本,就是:en.stm32cubemx_v5-6-0.zip

(4)解压en.stm32cubemx_v5-6-0.zip,然后安装

(5)双击STM32CubeMX,提示安装jre1.8.0_341,并打开网页。

? ? 新的STM32CubeMX版本会自动安装jdk。

(6)下载jre-8u341-windows-x64.exe,安装,然后设置环境变量(网上搜环境变量方法)

(7)关掉STM32CubeMX,然后重新打开。

3、出现这样的错误:../Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h(30): error: ?#5: cannot open source input file "stm32f1xx.h": No such file or directory
? #include "stm32f1xx.h"

解决:方法一:设置按钮-->C/C++-->点击添加图标-->点击...-->选择Drivers\CMSIS\Device\ST\STM32F1xx\Include-->点击“选择文件夹”-->点击“OK”

方法二:打开stm32f103_xx.ioc,重新生成代码。

4、.\AppStm32f103.axf: Error: L6218E: Undefined symbol SNetInterface_InitPara (referred from netinterface.o).最怕就是遇到这种错误。如果是其他错误,那么双击错误,就能打开错误的地方。双击这种错误,什么都没有,而且在keil里面搜不到。

解决:(1)如果是函数,那么删除掉出除startup_stm32f103xe.s,xx.uvoptx,xx.uvprojx外的所有文件,然后重新打开xx.uvprojx,重新编译,那么就会出现不见的函数在哪里。

(2)如果是extern修饰的全部变量,那么只能打开文件一个一个找了。没有其他办法。

5、想把几个函数变成bin文件,而不是库文件,怎么办呢?

解决:研究了很久,没有找到办法,但是想到类似的办法。不知道有没有更好的办法。

方法一:

[1]打开MDK-ARM\AppStm32f103\AppStm32f103.map文件,找到这几行:

Memory Map of the image

? Image Entry point : 0x08000131

? Load Region LR_IROM1 (Base: 0x08000000, Size: 0x0000cf5c, Max: 0x0001a800, ABSOLUTE, COMPRESSED[0x0000cc88])

? ? Execution Region ER_IROM1 (Base: 0x08000000, Size: 0x0000cbf8, Max: 0x0001a800, ABSOLUTE)

? ? Base Addr ? ?Size ? ? ? ? Type ? Attr ? ? ?Idx ? ?E Section Name ? ? ? ?Object

? ? 0x08000000 ? 0x00000130 ? Data ? RO ? ? ? ? 3190 ? ?RESET ? ? ? ? ? ? ? startup_stm32f103xe.o
在这里找到你要的那几个函数占用的空间;

这里可以回答这个问题:如何知道某个函数的地址和占用空间。上面就是解决办法。

[2]先看下面方法

********************************************************

attribute 属性
1,将函数加载到指定位置
示例将 main.c 中的 delay 函数指定到 0x08020000 地址,可以在 c 文件中函数的定义处指定 delay 函数。
void delay(void) __attribute__ ((section(".ARM.__at_0x08020000")));

2,将数组加载到指定位置
int Temp[] __attribute__ ((section(".ARM.__at_0x08020000"))) = {0x1, 0x2};

3,将变量加载到指定位置
示例可以直接将 c 代码修改如下:
const int Temp __attribute__ ((section(".ARM.__at_0x08020000"))) = 10; // RO
int Temp __attribute__ ((section(".ARM.__at_0x20000000"))) = 10; // RW

********************************************************

设置这几个函数的地址,函数地址的差刚好等于函数的大小;

[3]编译工程,然后使用j-link或st-link读取这个范围的代码,生成一个文件,这个文件就相当于库了。(网上搜用j-link或st-link读写代码的方法,下同)

方法二:

[1]把几个函数都放在一个文件里面;

[2]先看下面方法

*******************************************************************

修改.sct 文件,将目标文件加载到指定位置,在 Keil 中使用修改.sct 文件进行分散加载需要对工程配置进行如下修改,修改.sct 方法的详细使用请参考.sct 的语法规则。

(1)-->打开keil-->点击第3行第7个按钮-->打开Options for Target 'AppStm32f103'对话框-->点击Linker-->(取消)Use Memory Layout from Target Dialog-->马上在Scatter File里面出现:.\AppStm32f103\AppStm32f103.sct

(2)点击 Scatter File 栏后的 Edit对.sct 文件进行编辑。点不动的话,直接用记事本打开AppStm32f103.sct,然后编辑。
示例将 core_main.c 的目标文件进行分散加载。

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00020000 { ; load region size_region
?ER_IROM1 0x08000000 0x00020000 { ; load address = execution address
?*.o (RESET, +First)
?*(InRoot$$Sections)
?.ANY (+RO)
?}
?RW_IRAM1 0x20000000 0x00038000 { ; RW data
?.ANY (+RW +ZI)
?}
}

LR_IROM2 0x08020000 0x00020000 { ; load region size_region
?ER_IROM2 0x08020000 0x00020000 { ; load address = execution address
?core_main.o (+RO)
?}
}

红色区域表示将以上.c 文件加载到 0x08020000 地址,大小为 0x00020000。在这里,其目的通俗来说就是将以上.c 文件编译生成的目标文件链接到 MCU 芯片内部 flash 的 128KB 区域之后,区域大小为 128KB。

*******************************************************************

[3]编译工程,然后使用j-link或st-link读取这个范围的代码,生成一个文件,这个文件就相当于库了。

6、一个工程里面有几个文件夹,如果想把其中几个文件夹编译成库,然后把这个库放在其他工程里面,编译成可执行文件,怎么办?

STM32/keil把多个c文件编译为静态库lib_暴躁的野生猿的博客-CSDN博客_c文件怎么编译成lib文件

这篇文字已经很详细了,我就不说了。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:50:48  更:2022-10-17 12:53:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 19:45:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码