STM32F1xxx-TKStudio-GCC--基础入门Word格式.docx
《STM32F1xxx-TKStudio-GCC--基础入门Word格式.docx》由会员分享,可在线阅读,更多相关《STM32F1xxx-TKStudio-GCC--基础入门Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
![STM32F1xxx-TKStudio-GCC--基础入门Word格式.docx](https://file1.bdocx.com/fileroot1/2022-10/3/aeb4c12d-986a-41e5-bd05-04445f3a64ab/aeb4c12d-986a-41e5-bd05-04445f3a64ab1.gif)
同时最好把FLASH编程手册也下载(自己到官网找吧!
这不是必须的)
芯片参考手册里面也有提到一个AN2606文档,百度文库中也可以搜到,关于bootloader的.
下载STM32F1xxx参考手册
到官网下载STM32F1xx的固件库(或者说标准外设驱动库,或者说标准外设API),stm32f10x_stdperiph_lib
下载链接:
TKStudio是个非常好用的IDE要感谢他们的辛勤付出.
1.首先TKSTUDIO的网页中也有介绍用GCC进行ARM开发的指导,不过不是针对STM32的,STM32初学者估计也不好上手.如果你是个很新的新手建议也完整地阅读一下用户手册,有很多好用的功能不看是不知道的.
参考下面的链接
1首先要阅读一下芯片的手册,大概了解一下存储和组成结构、GPIO==.
2自己操作寄存器固然是可以不过确实没有用现成的固件库那么方便.
所以解压固件库后阅读一下stm32f10x_stdperiph_lib_um.chm这个文件,点开主页,建议直接阅读HOWTOUSETHELIBRARY这一章.
3.有了以上的准备,我们开始第一个程序的编写。
打开TKStudio新建一个工程。
4.
点ProjectWizard,选好路径,起个工程名称(工程名称会自动加入路径中,不要自己去建这个文件夹)
5.
选择芯片,如果没有相符的芯片,选个相近的也是OK的。
6.
7.工程建完后的界面和相应的文件夹。
下面要添加源码了。
8.
组织一下自己的文件
STLib用来放需要用到的固件库文件、和平台相关的文件等。
STLibraries是直接把官方固件库复制过来方便使用而已,和我们的程序是无关的。
USERAPP放自己的应用源码。
把一些必须的芯片和平台相关的文件复制到STLib。
我在STLib下面新建一个了一个GCC文件夹用来放平台相关的文件。
复制固件库:
stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver,把这个文件夹整个复制过来,这里放了所有的固件驱动,(其实我们可以把不需要的去掉,不过没太大必要),其他的一些文件我就直接复制过来,简化一下路径层次。
见下图
core_cm3.ccore_cm3.h从下面的路径复制过来(core_cm3.c暂时没用上不复制也可以)
stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
stm32f10x.hsystem_stm32f10x.csystem_stm32f10x.h从下面的路径复制过来
\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSup
port\ST\STM32F10x
stm32f10x_conf.h从下面的路径复制过来
\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
把平台相关的文件复制到GCC文件夹
stm32_flash.ld(链接脚本文件)
\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\TrueSTUDIO\STM3210E-EVAL
(注意这个是103ZE的链接脚本,其他不同容量的自己找下看,可以用记事本打开这个文件看看就知道了。
这个是和平台相关的!
)
startup_stm32f10x_hd.s(startup文件)
\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\gcc_ride7
根据自己的芯片进行选用,系列分类自己看STM32F1xxx用户手册
libgcc.a
C:
\TKStudio\Build\SourceryG++Lite\lib\gcc\arm-none-eabi\4.4.1
Libc.alibm.a
\TKStudio\Build\SourceryG++Lite\arm-none-eabi\lib
关于平台相关文件这个问题,其实可以不必这么复制的,因为TK里面已经有完整的工具链,我这样做是因为从IAR移植过来的后遗症关键是链接脚本的问题这样用着也挺好就先不深入了大家有兴趣可以到C:
\TKStudio\Build\GNU-ARMSTM32这里看看。
所需的基本文件都OK了,下面开始代码的编写和编译。
通过右键操作建立如下的分组结构。
在USERAPP里面新建一个main.c的主文件(右键点击工程窗口->
USERAPP->
新文件)
同时在STLIB文件组下添加如下两个文件(右键点击工程窗口->
STLIB->
追加文件到文件组)
建个mian函数随便写点东西吧。
我们先把编译环节弄好了再说。
配置工程目标。
选择一个输出格式,我以HEX为例。
设置包含路径
现在编译肯定报错的。
要在stm32f10x.h这个文件里选择芯片系列。
stm32f10x.h是个只读文件,我的做法是先把他的文件名改一下我改成stm32f10xb.h,然后拖入TK里面把相应的芯片系列去掉注释,然后保存为stm32f10x.h,然后可以删掉stm32f10xb.h见下图。
这时候点击“生成所有工程”应该是OK的了。
如果不行则要检查下那个步骤出错了。
下面我们要进行实际编码了。
我要控制GPIOG4来点亮一个LED,同时通过USART1来和PC通信。
我们用固件库来配置这些硬件。
启用固件库,打开stm32f10x.h把105行去掉注释。
打开system_stm32f10x.c,移到110行,选择符合自己板子的时钟频率。
默认是72MHZ。
右键点击STLIB追加需要用到固件驱动到STLIB文件组,这些文件的路径在我们自己建立的文件夹STLib。
。
添加后,生成一下,应该是OK的。
可以打开stm32f10x_conf.h把那些没用到的固件驱动注释掉,不过这个不是必须的。
在main.c中编写你想要的代码。
或者复制我下面的进去。
GPIO_InitTypeDef这一些元素在固件库说明文件里面有到里面搜索一下即可。
//-------------------我的代码通过串口来点亮/熄灭LED--------------------
#include"
stm32f10x.h"
#include<
stdio.h>
voiddelay1(unsignedchartimes)
{
unsignedchari,j;
for(i=0;
i<
250;
i++)
{
for(j=0;
j<
times;
j++)
{
}
}
}
intmain(void)
GPIO_InitTypeDefGPIO_InitStructure;
USART_InitTypeDefUSART_InitStructure;
// USART_ClockInitTypeDefUSART_CLKInit;
delay1(230);
//开启相应外设的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE);
//
//初始化IO口想用那个就用那个,不过要先用上面的函数把相应的时钟开启了
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOG,