你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32 串口接收字符串 中断程序怎么写?

[复制链接]
wuhong377 发布时间:2014-3-27 09:00
#include
#include "hw_config.h"
u8 uart1_buf[5];
int count1=0;
int Flag=0;

void Delay(void)
{
int x,y;
for(x=1000;x>0;x--)
for(y=1000;y>0;y--);
}

int main(void)
{        

u8 table[5];
u8 *p=table;

SystemInit(); /*系统初始化*/
LED_Configuration();
USART_Configuration();
ADC_Configuration();
while (1)
{
LED1(1);
Delay();
LED1(0);
Delay();
if(Flag==1)//接收中断
{

for(count1=0;count1 4)
{
Flag = 1;
count1 = 0;
}

}
}

我想让stm32实现接收由串口助手发过来的五个字节的数,然后再由stm32返回给串口助手,我这样子写的程序,第一次可以正确的返回发送的五个数,第二次开始就可能会出错。 请问这边的中断程序怎么写,能够让stm32稳定的每次接收五个字节呢?
收藏 评论15 发布时间:2014-3-27 09:00

举报

15个回答
wuhong377 回答时间:2014-3-27 09:21:57

RE:stm32 串口接收字符串 中断程序怎么写?

如果改为if(count1==5)的话 ,那么在发送数据的速度比较慢的时候, 如串口助手手动发送的时候,返回的数据正确,但是发送速度快的时候,数据也将会出现偏移了一位的情况。
回答时间:2014-3-27 10:10:51

RE:stm32 串口接收字符串 中断程序怎么写?

一般用一个比较大的缓冲区,比如1K空间,然后用一个存指针和一个读指针,当判断到有缓冲中有数据的时候,就接着上传读指针的位置继续读取,直到读取到存指针的位置。
那片清茶 回答时间:2014-3-27 10:11:31

RE:stm32 串口接收字符串 中断程序怎么写?

我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
wuhong377 回答时间:2014-3-27 14:37:11

回复:stm32 串口接收字符串 中断程序怎么写?

回复第 4 楼 于2014-03-27 10:11:31发表:
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
 
 
 
我接收了五个字节之后,count1==5之后 就重新将count1==0;  应该不会影响到吧。
 
有缘于你 回答时间:2014-3-27 15:44:32

RE:stm32 串口接收字符串 中断程序怎么写?

stm32 收到的数据一直是正确的么?还是也是错位的
那片清茶 回答时间:2014-3-27 16:03:43

回复:stm32 串口接收字符串 中断程序怎么写?

回复第 5 楼 于2014-03-27 14:37:11发表:
回复第 4 楼 于2014-03-27 10:11:31发表:
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
 
 
 
我接收了五个字节之后,count1==5之后 就重新将count1==0;  应该不会影响到吧。
 
 
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。

 
wuhong377 回答时间:2014-3-27 17:36:12

回复:stm32 串口接收字符串 中断程序怎么写?

回复第 6 楼 于2014-03-27 15:44:32发表:
stm32 收到的数据一直是正确的么?还是也是错位的
 
 
中断程序里面使用if(count1==5)的话。手动一次一次发送都是正确的。 如果自动循环发送,速度比较快的话,就可能会出现错位。
 
 
wuhong377 回答时间:2014-3-27 17:38:13

回复:stm32 串口接收字符串 中断程序怎么写?

回复第 7 楼 于2014-03-27 16:03:43发表:
回复第 5 楼 于2014-03-27 14:37:11发表:
回复第 4 楼 于2014-03-27 10:11:31发表:
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
 
 
 
我接收了五个字节之后,count1==5之后 就重新将count1==0;  应该不会影响到吧。
 
 
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。
 
 
因为我上位机每次就是发五个字节,所以我是想,stm32下位机进入中断后每次固定接收五个字节,然后进行判断再返回ADC采样的数值。

 

 
fengye5340 回答时间:2014-3-27 20:41:10

RE:stm32 串口接收字符串 中断程序怎么写?

接受字符串,需要用数组和指针来实现,你接受N个字符,就定义一个容量为N的字符串,指针移动接收字符,当指针达到尾部,自动清理数组,开始一轮接受
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版