内容概览
从STM32CubeIDE转文件到STM32CubeMX,并使用keil5编译时的报错error: L6236E: No section matches selector - no section to be FIRST/LAST.
在STM32CubeMX打开STM32CubeIDE的项目文件
打开ioc后缀名的文件(这里注意用STM32CubeMX打开,如果电脑上有STM32CubeIDE,右键打开方式自行选择一下)
在Project Manager里将调试工具选择为MDK-ARM,并点击GENERATE CODE生成
这一步我会跳出这个提示(不知道别人有没有),选择ok并关闭STM32CubeMX
打开一开始进入的文件,发现里面多了个名叫MDK-ARM的文件夹,打开后发现只有一个keil5的urprojx文件,双击打开
这里面其实是已经从拷进来了大部分东西,点击编译让其生成一下
编译完成后再次打开文件夹发现多了很多东西,但是有一个报错(我这里是全部写在主函数了,所以只有一个,如果有在ide里面外部导入过文件,需要自行根据提示报错将其补充加入keil5,后面浅浅写了一点,可以先去看看)
报错:error: L6236E: No section matches selector - no section to be FIRST/LAST.
如图所示:
原因是在当前的工程中没有添加启动文件,需要在工程中添加相关的启动文件,也就是st官方的xxxx.s文件
具体添加过程如下:
先关闭keil5的程序,重新打开STM32CubeMX,再次点一下GENERATE CODE生成项目(只要编译后再次从STM32CubeMX生成一下就行)
发现这次没有像第一次那样报错了,提示生成成功
这一次重新编译后,MDK-ARM文件夹里多了一个文件,
在keil5里打开这个盒子
将刚刚出现的xxxx.s文件添加进去
再次编译即可
STM32CubeIDE里导入的.c和.h文件
STM32CubeIDE主要的文件在这个文件夹里面
导文件就不说什么了,可以不导入到左边目录,懒的话就在这里面添加一下.c文件就行
error: #20: identifier “uint8_t” is undefined
编译时候对uint8_t uint16_t 等报错
解决办法:
在文件中直接引用头文件#include “stdint.h”
串口printf重定向接收不到数据
先附上串口重定向代码,头文件#include “stdio.h”
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xFFFF);
return ch;
}
普通的HAL_UART_Transmit可以正常收发,但是重定向后不行
原因是没勾上MicroLIB库,勾上即可
STM32的SWD烧录模式No Target Connected
stlink接入电脑后,左边①处有显示,但是②处显示No Target Connected
在编译时显示No Target Connected
曾经的解决方法(成功过)
1.对stlink的5v插上外接电源,让其用外部供电,当时猜测可能是供电不足
2.按住板子复位键不放,直接点击下载,在下方状态栏变化的那一瞬间,松开复位键(有概率失败)
还是没有完全解决,感觉有点凭运气
结
看我能把这篇写多长emmm