本文将指导如何使用Keil IDE和STM32开发板进行嵌入式开发。这是作者第一次使用ARM处理器,因此选择了一个商业级别的IDE,因为它们通常更易于使用。随着作者转向GCC,也将记录这一过程。
首先,需要STM32探索板。可以在上查看它。此外,还需要Keil IDE。可以从下载一个免费且程序空间限制为32KB的版本。
首先,需要创建一个新项目,并在ST Micro部分选择处理器。然后,系统会询问是否要将STM32启动代码复制到项目文件夹。选择是。接下来,建议使用Keil的STM32初始化文件。作者在示例代码中找到了它们。可以在下载这些文件。下载文件后,解压缩。将以下文件复制到与项目文件相同的文件夹中:
现在将STM32_Init.c添加到项目中。右键单击Source Group 1,然后单击添加文件到组。可以随意分组,这不会影响任何构建过程。
为了保持整洁,将创建一个Bin文件夹。因此,在与项目相同的文件夹中创建一个新目录。接下来,右键单击Target文件夹,然后单击目标选项。然后单击输出,单击选择对象文件夹,找到创建的bin文件夹。
最后,创建并添加一个文件(称之为main.c)。在那里,添加一个将调用Init代码并包含init文件的主函数。可能还想包含STM32库文件。
#include "stm32f10x_lib.h"
#include "STM32_Init.h"
int main(void) {
stm32_Init();
return 0;
}
现在,需要为STM32 Discovery设置调试环境。首先,需要选择调试器。因此,右键单击项目,然后单击目标选项,然后转到调试选项卡。接下来,不想运行模拟器,因此将单击右侧的Use:单选按钮。在下拉菜单中,选择ST-Link Debugger。然后需要单击设置并选择SWD。最后,喜欢在main()之前运行到main()的检查,以便在运行之前停止。
在本节中,将设置STM32以回显它在串口上接收到的内容。第一步是配置usart。使用配置向导打开STM32_Init.c。当作者介绍如何使用GCC开始时,将编写如何在C中执行此操作。启用USART1并设置参数。同时启用USART1中断RXNE(接收),这样就不需要轮询数据,将在字节到达时收到通知。
一旦一切都按照喜好配置好了,就保存。现在将能够使用名为USART1的结构。这里有一些关于经常使用的成员的注释。
接下来,需要打开main.c。在该文件中,将添加函数定义void USART1_IRQHandler(void)。该函数已在STM32F10x.s中声明,并已映射到中断向量。因此,所需要做的就是启用中断(在配置向导中确实已经完成了),并覆盖它。函数看起来会像这样:
void USART1_IRQHandler(void) {
volatile unsigned int vsr;
int ByteSent;
vsr = USART1->SR;
if (vsr & USART_FLAG_RXNE) {
// 清除中断,因为正在处理它
USART1->SR &= ~(USART_FLAG_RXNE);
ByteSent = (USART1->DR & 0x1FF);
SendByte(ByteSent);
}
}
当然需要定义SendByte。原型将是void SendByte(int byte);定义看起来会像这样:
void SendByte(int byte) {
// 等待uart完成发送字节。
while (!(USART1->SR & USART_FLAG_TXE));
USART1->DR = (byte & 0xFF);
}
还在main返回之前添加了一个无限循环。现在,只需要将PA10连接到RX,将PA9连接到TX即可。使用了Arduino上的FTDI芯片来实现这一点。只是将PA10连接到Arduino的RX,将PA9连接到TX,并取出了avr。之后,发送到终端的任何内容都会回显给。如果需要一个终端程序,使用了Termite。