寄存器与基于固件库的stm32 LED流水灯例子的编程方式的差异
使用固件库bai,目前du比较多的例程是使用固件库编写的。官zhi方的例子也都采用固件库方式dao。特点就是简单,易于理解,资料多。如果你没有CortexM系列内核的开发基础,建议从固件库开始玩起。等有一定基础,或是特别需要时再用寄存器。
使用寄存器,想要深入理解CortexM3内核或是需要为了获得更好的可移植性,学习寄存器编程会比较有帮助。但是从专业的角度上看,寄存器更贴近底层,对外设的工作原理和运行机理会有更深的理解。
ST-link驱动的安装
可以去网上直接下载该驱动包,下载好解压
点开上述文件,然后再查看设备管理器,下载器在电脑上就能正常使用了。
C语言代码的编译以及Keil5的调试
在开发板商家发给的主要学习代码,然后再修改了一下主函数的相关代码,实现连续发送“hello windows!”
主函数代码
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include <stdlib.h>
int h=1;
int main(void)
{
char stop[]={'S','t','o','p',',','s','t','m','3','2'};
u16 t;
u16 len;
u16 times=0;
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
LED_Init();
KEY_Init();
while(h)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;
for(t=0;t<len&&USART_RX_BUF[t]==stop[t];h++,t++)
{
if (h>=10)
{h=0;break;}
}
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
printf("\r\n over \r\n");
USART_RX_STA=0;
}
else
{
times++;
if(times%200==0)
{
printf("hello windows!\r\n");
}
delay_ms(10);
}
}
}
本次使用的是stlink,所以就在Keil5中选
然后按下列配置
然后在点Flash Download,并设置
最后再下载进板子里,就可以了。
Stm32的串口通信
本次实验是stm32连续发送hello windows!给Windows,接受程序使用的为野火串口助手
可以看到该程序一直在发送hello windows!
我们输入Stop,stm32该程序就会停下来了。
总结
本次实验,让我们学习到了stm32核心板的程序下载调试,以及Keil5的设置,还学习使用了串口调试器验证了程序的正确性。