基本功能描述:
上位机发送指令控制STM32
情况一:命令为3个字符
起始符 命令符 结束符 功能
0x2f 0x34 0xcc 温度数据返回
0x2f 0x32 0xcc led亮
0x2f 0x33 0xcc led灭
我是通过串口中断来实现串口数据的接收的。
中断程序如下:如果接收到的指令正确,改变全局变量USART_RX_STA 的值,让它等于0x80。
if(USART_RX_STA != 0x80)
{
if(data == 0x2f) //起始符
{
memset(RecvBuf, 0, sizeof(RecvBuf));
RecvBuf[0] = data;
USART_RX_STA = 0;
USART_SendData(USART1, data);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
else if(data == 0x39) //结束符
{
if(RecvBuf[0] != 0x2f)
{
memset(RecvBuf, 0, sizeof(RecvBuf));
return;
}
RecvBuf[2] = data;
USART_RX_STA = 0x80;
USART_SendData(USART1, data);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
else
{
RecvBuf[1] = data;
USART_SendData(USART1, data);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
}
主函数程序:
while(1)
{
if(USART_RX_STA == 0x80)
{
switch(RecvBuf[1])
{
case 0x30:
break;
case 0x31:
break;
case 0x32:
GPIO_SetBits(GPIOD, GPIO_Pin_2);
break;
case 0x33:
GPIO_ResetBits(GPIOD, GPIO_Pin_2);
break;
case 0x34:
temp=DS18B20_Get_Temp();
memset(SendBuf, 0, sizeof(SendBuf));
SendBuf[0] = 0x2f;
SendBuf[1] = 0x34;
if(temp<0)
{
temp=-temp;
SendBuf[2] = Number[11];
}
else
{
SendBuf[2] = Number[10];
}
SendBuf[3] = Number[temp/100%10];
SendBuf[4] = Number[temp/10%10];
SendBuf[5] = '.';
SendBuf[6] = Number[temp%10];
SendBuf[7] = 0x04;
SendBuf[8] = 0xcc;
for(i = 0; i < 9; ++i)
{
USART_SendData(USART1, SendBuf[i]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
break;
default:
break;
}
USART_RX_STA = 0;
}
else
{
delay_ms(200);
}
}
}
问题是:程序开始还可以正确执行,但是执行一段时间,再发送指令,它就没有响应了。
全局变量是在mian.c文件里定义,然后在中断程序里extern了一下。我也不知道这个程序可能出了什么问题,望大虾指点一二!
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
stm32F103串口的调试,串口2发送数据串口1接收并在串口调试助手上显示keil工程源码.zip (59个子文件)
stm32F103串口的调试,串口2发送数据串口1接收并在串口调试助手上显示keil工程源码
Startup
STM32F10x.s 11KB
usart.uvgui.junzh 73KB
usart.plg 10KB
usart_uvopt.bak 68KB
usart.uvopt 9KB
Readme.txt 2KB
usart_Project.dep 7KB
STM32F10x.lst 34KB
usart_uvproj.bak 16KB
STM32F10x.s 11KB
usart.uvproj 17KB
User
lcd.c 8KB
main.c 1KB
lcd.h 2KB
SPI_FLASH.c 4KB
configuration.h 139B
spi_flash.h 2KB
stm32f10x_map.h 28KB
stm32f10x_it.c 31KB
stm32f10x_conf.h 6KB
FONT.c 7KB
main.h 467B
stm32f10x_it.h 4KB
stm32f10x_lib.h 3KB
configuration.c 9KB
font.h 307B
FWLib
STM32F10xR.LIB 1.68MB
usart_Target 1.dep 239B
Obj
usart.htm 46KB
usart.plg 692B
configuration.d 1KB
tft_lcd.o 86KB
stm32f10x_it.crf 74KB
lcd.o 84KB
tft_lcd.crf 73KB
lcd.d 1020B
main.crf 72KB
usart.sct 479B
configuration.o 80KB
spi_flash.crf 69KB
font.d 54B
usart.lnp 395B
font.o 11KB
lcd.crf 71KB
tft_lcd.d 1KB
main.d 1KB
spi_flash.o 79KB
usart.tra 1KB
spi_flash.d 1KB
STM32F10x.o 5KB
usart.hex 10KB
font.crf 2KB
usart.axf 149KB
stm32f10x_it.d 1KB
main.o 81KB
usart.build_log.htm 0B
configuration.crf 69KB
stm32f10x_it.o 93KB
usart.map 87KB
共 59 条
- 1
SKCQTGZX
- 粉丝: 98
- 资源: 4858
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- IMG20240303105441.jpg
- 高校教材管理系统数据库文件
- 我的电竞赛场之旅:从新手到冠军的经验分享
- SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络数据分类预测(Matlab完整源码和数据)
- 可直接运行 基于MATLAB的GPS网平差计算方法 简易MATLAB源代码计算规则 含Excel数据.rar
- 公司自助餐管理系统数据库文件
- CSP比赛经验分享:从入门到提高 CSP比赛中的一些经验和心得
- python贪吃蛇完整代码
- 中学排课管理系统数据库文件
- Python 简易文件系统模拟:设计一个简单的文件系统,实现文件的创建、读写、删除和目录管理等操作,可以考虑文件权限、路径解
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0