在上一课中,我们已经建立STM32的开发环境,在这一课中我们要学习如何建立一个简单的工程。这第一个程序是一个最简单的程序,也就是所有程序员都知道的Hello World程序,它的功能是可以打印出Hello World。就算是比尔盖茨或者乔布斯当初学软件时也是从这个程序开始的。哈哈。
首先我们打开cubemx,
打开File->New Project,选择单片机型号为stm32f103RCTx.
双击选定的STM32F103RCTx ,会打开配置界面
在左边的窗口,选择sys->Debug,选Serial Wire; Usart->Mode->Asynchronous
切换窗口到Clock Configuration,使用RC振荡并修改红圈处的几处参数,调整主频为64M
在窗口上方下拉式菜单中选择Project->Settings 打开设置窗口,修改工程名,并设定工程保存位置,同时Toolchain/IDE选择MDK-ARM V5;修改完点OK保存
在窗口上方下拉式菜单中选择Project->General Code ,此时会出现进度条,待生成成功后会提示如下图:
此时开发stm32f103RCT6的相关的库文件和基础代码工程就已经生成成功,保存在指定的目录中了 。我们直接点击Open Project 打开工程
可以看到一个包含了STM32开发库的工程就被建立了,我们打开main.c
在int main(void)函数中增加一句打印hello world
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
while (1)
{
printf("hello world \r\n\n");
HAL_Delay(1000);
}
}
同时编写两个打印重定位函数
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
int fgetc(FILE *f)
{
uint8_t ch = 0;
HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
return ch;
}
点击红圈处的编译按钮,编译一下程序,编译完会提示 0 Error ,则表示编译成功通过了。
查看程序的运行有软件仿真和硬件仿真两种方式,硬件仿真需要有相应的STM32的开发板和仿真器,这些在后面我们会讲到,这一课我们先使用软件仿真来简单检测一下我们的程序。
Keil有很强大的软件仿真功能,Keil的仿真可以查看很多硬件相关的寄存器,通过观察这些寄存器值的变化可以知道代码有没有正常运行。
接下来我们就用KEIL的软件仿真来查看我们程序要打印的Hello world
点击这个魔法棒
在“Debug”选项卡中选择“Use Simulator”,表示使用软件仿真;选择“Run to main()”则表示跳过汇编代码,直接跳转到main函数开始仿真。设置下面的“Dialog DLL”项为“DARMSTM.DLL”和“TARMSTM.DLL”;parameter项为“-pSTM32F103RC”,用于设置支持STM32F103RC的软硬件仿真。
点击开始仿真,这个时候会多出来一个工具条,就是Debug工具条。
1:复位,其功能等同于硬件上按复位按钮,相当于实现了一次硬复位。按下该按钮后,代码会重新从头开始执行。
2:执行到断点处,按按钮用来快速执行到断点处,有时候并不需要观看每步时怎么执行的,而是想快速执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是已在查看的地方设置了断点。
3:停止运行,此按钮在程序一直执行的时候变为有效,可以使程序停止下来进入到单步调试状态。
4:执行进去,该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下等同于执行过去按钮。
5:执行过去,在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。
6:执行出去,该按钮是进入了函数单步调试的时候,有时候可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数回到函数被调用的位置。
7:执行到光标处:该按钮可以迅速使程序运行到光标处,与执行到断点处按钮功能类似。
8:汇编窗口,通过该按钮可以查看汇编代码,这对分析程序很有用。
9:堆栈局部变量窗口,通过该按钮可以显示Call Stack+Locals窗口,显示当前函数的局部变量及其值,方便查看。
10:观察窗口,MDK5提供2个观察窗口(下拉选择),该按钮按下则弹出一个显示变量的窗口。输入想观察的变量或表达式,即可查看其值,是很常用的调试窗口。
11:内存查看窗口,MDK5提供4个内存查看窗口,按下按钮,则弹出一个内存查看窗口,可以在里面输入要查看的内存地址,然后观察这一片内存的变化情况。
12:串口打印窗口,MDK5提供4个串口打印窗口。按下该按钮,则弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。
13:逻辑分析窗口,该图标下面有3个选项,一般用第一个,也就是逻辑分析窗口。通过SETUP按钮新建一些IO口,于是可以观察这些IO的电平变化情况,并以多种形式显示出来,比较直观。
14:系统查看窗口,该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置是否正确。
我们点击打开12:串口打印窗口,点击2:执行到断点处,这样程序就运行了,这时在串口打印窗口,我们可以看到打印出了hello word!
是不是很COOL,这样就不用硬件也可以调试程序了,enjoy it.
谢谢大家的阅读,后续的教程,我将继续介绍一些嵌入式C语言的基础,还有硬件仿真调试等等,敬请持续关注。
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/202581.html