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

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

[复制链接]
wuhong377 发布时间:2014-3-27 09:00
#include
) e( Z( U# A: v- A! C#include "hw_config.h"- S, S  I/ c3 W8 V- h0 l* E
u8 uart1_buf[5];* R6 B6 y4 |2 I- `  d5 O0 \8 J
int count1=0;
# r, e6 J& C& @9 |' b  lint Flag=0;
- c- e: `9 c6 U% K4 ?! t3 u2 D/ r4 Q: ]5 c6 o% |% @* p
void Delay(void). |' S# {$ p) H: q
{
$ \# m. W3 L0 P6 F% E1 ^+ {6 S+ uint x,y;
" [, [. g6 v0 J5 a+ ~for(x=1000;x>0;x--)
, h3 E( R! W3 c0 a* T! g' ]0 R4 mfor(y=1000;y>0;y--);' a0 ?; f5 q$ Q: R+ v# N
}
+ Y) ~) r. D7 B) z% C0 a! L! a# J7 e1 y5 V! Y$ F
int main(void)
" q5 l. y$ @  m/ ~  ]{        : v& y! ]8 w6 w5 j1 R
8 s& U! U- f. W5 a' g
u8 table[5];
1 s4 \* h  o6 hu8 *p=table;
8 v8 t) @5 T* b) ]( l2 g( x6 F0 h" p9 O9 v
SystemInit(); /*系统初始化*/
: w, q: ]* s) O4 k- g' M- rLED_Configuration();3 N; |5 B- b9 A4 T
USART_Configuration();: v4 x3 G4 r0 O8 A. b6 |5 y* ~, u! i
ADC_Configuration();
8 B4 `9 ?2 V; J# n) |$ C  Gwhile (1)
# l8 g# c% z& [, l! P7 _{  |- Z# _  {& u9 H/ V
LED1(1);/ D: d2 W  d2 F
Delay();
' r# {8 s2 q& m1 {! TLED1(0);
' w) C3 L. N' ~. }% hDelay();0 }6 M& e( g$ P+ h9 p! J# Y+ L
if(Flag==1)//接收中断/ H( n" A+ J8 u4 ^6 `. B
{
2 x- q- T9 G/ p/ L% B8 N
; V4 n  K3 v# S- J2 I, v. P5 X0 n3 Nfor(count1=0;count1 4)
6 l! Z* \# C4 w) f{
* B6 X$ ]% {: O& C0 g9 K# }9 KFlag = 1;0 G. g$ ^7 o6 G' r) \0 }
count1 = 0;3 u/ W& M5 G9 R% _' w
}
6 z9 Z! G. |2 q" U% i6 f3 }# g/ e5 H& v1 C
}
# G/ y$ C  b. `) d}
$ c  U5 ^- q7 b# d( m, b
8 u" z( G* a  s( c8 f$ e  I我想让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发表:4 |3 {" ]0 d; U) m! F
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?- z, B3 {9 W) u" u& s. L
 
& c: P' X% `7 F1 H8 H; b) {- H % R; Y1 F% I4 C0 Q( g
 
  @' N1 S8 `% \0 W5 y3 g我接收了五个字节之后,count1==5之后 就重新将count1==0;  应该不会影响到吧。
/ X' L; y3 Q' H- a& O. [- [ 
有缘于你 回答时间:2014-3-27 15:44:32

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

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

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

回复第 5 楼 于2014-03-27 14:37:11发表:
4 O8 _* V6 `, J, X% a0 f回复第 4 楼 于2014-03-27 10:11:31发表:
) ~5 v7 T  f6 l& r3 U& A+ j+ [我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?+ D' F0 G: f9 `0 E: {
 
4 l' X& Y1 v( X3 t5 m, w6 \ 
' v9 v3 D; {2 q4 G1 U 
0 x* ?* y+ @7 q+ }. ]  _2 M我接收了五个字节之后,count1==5之后 就重新将count1==0;  应该不会影响到吧。* t/ \) E  l- T) H( ~
 + C: Y% V) s+ `& _& [
 
9 i. ?5 P+ K, K* W' G你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。9 i; G5 B2 K! c# ~, D) c
/ \# O( `% S' @% n0 Z; o' }
 
wuhong377 回答时间:2014-3-27 17:36:12

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

回复第 6 楼 于2014-03-27 15:44:32发表:
. \; o. l0 W$ R' N+ [stm32 收到的数据一直是正确的么?还是也是错位的
5 C4 f5 _$ V  G0 R/ F3 i 
9 X& M* Y7 C$ h* h4 U ) t& }! Z$ k2 H7 i! R) ]
中断程序里面使用if(count1==5)的话。手动一次一次发送都是正确的。 如果自动循环发送,速度比较快的话,就可能会出现错位。  g4 x, w# L( a! X. Z/ @; X
 ( N4 [6 M' H/ w
 
wuhong377 回答时间:2014-3-27 17:38:13

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

回复第 7 楼 于2014-03-27 16:03:43发表:
, o4 t: F0 O0 r# Y3 O+ B, Y回复第 5 楼 于2014-03-27 14:37:11发表:! L+ x; i1 s% o" k: }+ P* n
回复第 4 楼 于2014-03-27 10:11:31发表:
1 g3 G7 ?- K& ]/ o我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
9 e! p8 d; a  a7 _ 
* a! Q7 G  x) O( Y( h- A) | # J) m; e% v" N1 \% X; I
 4 o1 g4 w3 r' X
我接收了五个字节之后,count1==5之后 就重新将count1==0;  应该不会影响到吧。$ j& I* }! v& }9 R; e
 
% p( S" G9 E; A4 |$ E5 a4 s / B  E1 u) ?: F+ j
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。! j6 t$ Q+ e/ P$ r- j  ^4 e5 e
 % W- h& J) w+ J5 O3 [6 o3 g9 c
 % S8 q$ I+ i. u7 \$ g& y$ Y
因为我上位机每次就是发五个字节,所以我是想,stm32下位机进入中断后每次固定接收五个字节,然后进行判断再返回ADC采样的数值。0 G$ T( ^( ^: _" [; a) O7 d2 [: H( L. R

- ]; |, @1 Y' a. C ( B6 h7 O- a- K4 }4 D+ f7 \# h

! }+ m/ q  C) J% ]$ b6 V. t* p 
fengye5340 回答时间:2014-3-27 20:41:10

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

接受字符串,需要用数组和指针来实现,你接受N个字符,就定义一个容量为N的字符串,指针移动接收字符,当指针达到尾部,自动清理数组,开始一轮接受
wkuang 回答时间:2014-3-27 21:41:44

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

for(count1=0;count1
dlyt03 回答时间:2014-3-28 10:45:37

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

定义一个数组,接收时把发送的字符赋给相应的数组,返回的时候再依次读取,完毕后把数组清零,进行下一次赋值
wuhong377 回答时间:2014-3-28 14:58:53

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

<div style="padding:5px;border:1px dashed #ccc;">5 e1 p0 d: c; X4 F6 x7 l' V
回复第 11 楼 于2014-03-27 21:41:44发表:
$ q4 e/ y1 ^0 C! |for(count1=0;count1
废鱼 回答时间:2014-3-28 16:17:04

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

1次只能接收1个数据。如果你发送的很快的话,数据会有丢失。可以在中断中处理。
& B( [( L! ]  t. I% b6 z- cif(count1 > 4)  Y6 l( n- G% w: o# k1 }$ z
{
# P% `, t: {' ~# H7 w! H5 pUart1_PutString(p , 5);
; Z# L$ c  h! z3 l% ]count1 = 0;& @: L( s8 p2 C: y
}
dzc2001 回答时间:2014-4-2 16:47:58

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

看看固件库的例程。里面有现成的代码。

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版