STM32
直播中

李鸿洋

11年用户 998经验值
擅长:可编程逻辑
私信 关注
[问答]

先手求助如何去新建一个stm32f103zet工程呢

如何去新建一个STM32f103zet工程呢?如何对stm32f103zet工程进行仿真调试呢?

回帖(1)

柴扉

2021-11-29 14:25:42
1、新建项目、选型stm32f10x的芯片。
  

  


  

  


  

  

下面是芯片的介绍

  

  

新建后如下

  

  

  2、添加组,在组中添加相应的文件。

  新建完项目后添加组,添加CODE,USER,STM32LIB。
在工程目录下创建相应的文件夹,在文件夹中添加相应的代码文件。

  

  

  2.1 CODE组中加入core_cm3.c内核核心文件、startup启动文件。

  
  

  

startup启动文件是汇编文件,其中有一语句:IMPORT SystemInit。SystemInit()函数写在了system_stm32f10x.c文件中。
  2.2 USER组中加入main.c主函数文件、stm32f10x.it.c中断文件,system_stm32f10x.c系统初始化文件。

  
  

  

main.c中要写一个int main(void){return 0;}的空函数
stm32f10x.it.c中断文件,其中定义了各种中断服务函数。
startup_stm32f10x_hd.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。
  2.3 STM32LIB组中加入需要使用到的库函数

  注意:使用库函数得在C/C++中Define添加一语句。(暂不知缘由)
  STM32F10X_HD,USE_STDPERIPH_DRIVER   
  

  

  2.4 包含头文件的路径

  
  

  

选择头文件所在的文件夹

  

  

  3、build或rebuild构建项目,看是否有错误。

  
  

  

无error,warning 由main.c的函数代码的wile(1)造成的,可略。

  

  

  4、使用软件仿真,观察现象。

  4.1main.c输入代码,并且rebuild项目。


#include "stm32f10x.h"


int main(void)
{
        GPIOA->CRL = 0x03;//0x00000033前面的零是可以省略的
        GPIOA->CRH = 0x03;
        while(1)
        {
                if((GPIOA->IDR&0x0100) == 0x0100)
                        GPIOA->ODR |= 0x0001;
                else
                        GPIOA->ODR &= 0x0000;
        }
}
4.2 修改debug设置。

  在Debug那个选项卡里,我们选择Use Simulator,使用软件进行调试
修改Dialog.DLL,Parameter。
  DARMSTM.DLL,-pSTM32F103ZE TARMSTM.DLL,-pSTM32F103ZE   
  

  

  4.3 进入调试。

  i.启动调试

  设置完毕后,我们可以在菜单栏找到这个放大镜的图标,点击启动调试.

  

  

  ii.步进观察现象。

  进入到调试界面。
可以看到程序已进入正常的调试模式运行,这个时候程序是不会自动的去运行的,需要我们点击下一步的按钮才会一步一步的去执行。

  

  

在外设中选择GPIOA.

  

  

弹出GPIOA的相关外设调试窗口。

  

  

点击步进,执行一条语句。

  

  

可以观察到CHL发生了改变。

  

  

继续按步进,根据自己的代码观察仿真结果。
工程代码连接:keil5stm32f10x软件仿真工程
  iii.其他

  我们点击菜单栏的watch图标,可以选择一个查看窗口,我们这里选择watch1就好了

  

  

在这里可以查看任意变量的值,你可以在下面输入你想查看的变量回车就好了方便我们追踪发现错误

  

  

在软件的最左边是寄存器的变量值,方便我们随时查看寄存器值是否正确在上面的菜单栏那一行
  第一个是复位按钮,按下后程序会进行复位操作
第二个直接运行,就像我们平时一样,程序自动的由上自下的运行,一般我们都会加断点进行调试加断点直接双击当前行就可以了
第三个X是停止运行
后面的都是单步运行,具体的进入或跳出请看图示
  
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分