前言:
本文主要利用stm32芯片,完成单片机与计算机的通信过程,单片机不停给计算机发送信息,计算机在串口调试助手发送停止指令之后,单片机停止发送。通过这个小实验学习窗口通信
一、串口通信要求
- 设置波特率为115200,1位停止位,无校验位。
- STM32系统给上位机(win10)连续发送“HELLO Livechen”,上位机接收程序可以使用“串口调试助手“,也可自己编程。
- 当上位机给stm32发送“Stop,stm32”后,stm32停止发送。
二、串口通信准备
1、硬件准备
-
我采用的是DAP下载器
-
开发板采用的野火stm32指南者系列
2、软件准备
主函数:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include <stdlib.h>
int num=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); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
uart_init(115200); //´®¿Ú³õʼ»¯Îª115200
LED_Init(); //LED¶Ë¿Ú³õʼ»¯
KEY_Init(); //³õʼ»¯Óë°´¼üÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
while(num)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
printf("\r\nHELLO Livechen:\r\n\r\n");
for(t=0;t<len&&USART_RX_BUF[t]==stop[t];num++,t++)
{if (num>=10) {num=0;break;}}
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
}
printf("\r\n\r\n");//²åÈë»»ÐÐ
USART_RX_STA=0;
}
else
{
times++;
if(times%500==0)
printf("HELLO Livechen\r\n");
if(times%200==0)
printf("HELLO Livechen\n");
if(times%30==0)LED0=!LED0;//ÉÁ˸LED,ÌáʾϵͳÕýÔÚÔËÐÐ.
delay_ms(10);
}
}
}
三、下载程序进入STM32
1、下载之前相关配置
- 这里我用的DAP下载器,所以2处选择DAP
- 点击Setting,按照下图依次配置即可(前提是你和博主的下载器和板子类型相同)
2、下载
编译通过后点击下载
四、最终效果展示
总结:
实验过后对于串口通信的过程有了比较清楚的认识,实验中遇到了许多困难,最终都找到了解决的方法,成功完成了通信。博主也是第一次接触串口通信,博文中难免有许多不足的地方,若大家提出来博主会及时改正