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

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

[复制链接]
wuhong377 发布时间:2014-3-27 09:00
#include ' Q2 l$ E  Y- N  t
#include "hw_config.h"
# _- V. C! Z6 m+ q6 r# `$ K& gu8 uart1_buf[5];
4 {: i3 p, b0 nint count1=0;
) ~! Z4 ~. l! ~. h1 X2 l' {int Flag=0;8 |' N* v/ ~; m$ a6 ~

2 o; M" o; ^# N* z* |+ uvoid Delay(void)3 h) i$ S" f+ D3 m6 M1 G
{( H3 j8 [, J4 d  g) X% G/ h
int x,y;/ [/ _) K) F+ X$ X% V* }' o
for(x=1000;x>0;x--). a* h& I9 ~" q8 J' V5 b
for(y=1000;y>0;y--);- m2 m6 u  q) S8 C, E: A- B7 W( E. O
}
! V/ A5 ?4 K- l% _1 k
' [( m: C" U! O" p  l+ r0 zint main(void)
8 `# S: [9 w! `{        % O( ]6 o" g) ?* c
, G7 j& f1 t3 e$ Z$ l: }
u8 table[5];: H# q. D) v3 H* c
u8 *p=table;2 U, e# L' i+ _. S! Y
$ u- L4 ?3 z, ?" P( e
SystemInit(); /*系统初始化*/
# Q: E4 L0 O& F: z( YLED_Configuration();- s* X& M: d4 y6 _
USART_Configuration();0 C4 T1 D( ?- E* Q9 a
ADC_Configuration();! Z( M, C9 _3 n% H3 M" j' Y" D
while (1)- g$ x) O7 {# H+ @$ S
{& @9 \3 A: u& S% T0 K& H
LED1(1);5 N. ]9 G  L2 L. x2 m' ~9 W0 L
Delay();) c. a- U. K, a1 O% o8 g
LED1(0);/ N$ C3 I" x: r/ J- Q- m+ t, w
Delay();
  I; B2 J& S4 O. N/ F$ D  Aif(Flag==1)//接收中断; ~7 P* Y+ a- u8 |9 r* M# C  T. o
{
; ^% X  J! |% d& }
1 A6 w$ b# ~1 rfor(count1=0;count1 4)
7 B7 p% D8 x* @  G+ Z{
$ g% W: n0 u, u( b) [Flag = 1;3 f5 a6 f2 o8 ~0 @; W9 g
count1 = 0;
! S0 d! m  C/ D7 u" x; F}
8 F$ m; S& {& T8 \$ f
. n% @/ }2 r# y  Y5 N9 }$ M- Z. X" [}& F% N1 J* K4 i" X
}" O' D0 j# n8 m7 d1 x

+ T: B& Q1 d0 }4 ^我想让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发表:/ l, t& m- }( T: S  g) V
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?( H) J4 f7 d/ |) r# E* T
 
7 b7 N* T( N& \ 1 \2 A! `3 i" d$ o/ D% Q) V
 
; m8 h4 ~9 T: o$ t" J我接收了五个字节之后,count1==5之后 就重新将count1==0;  应该不会影响到吧。4 b+ ?5 W" @9 A/ c, W! y
 
有缘于你 回答时间:2014-3-27 15:44:32

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

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

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

回复第 5 楼 于2014-03-27 14:37:11发表:
% `& E3 ^# H; _- x+ |2 g- K: l回复第 4 楼 于2014-03-27 10:11:31发表:
( A* q" Q; h  m% f; G* l我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?. u7 p( M. Z2 {% H
 
% A+ _" m+ y% X4 ]2 z! O8 I% g + D! Y% h. d9 w. C$ W% D2 X
 
9 f3 Y$ m, ~1 D我接收了五个字节之后,count1==5之后 就重新将count1==0;  应该不会影响到吧。# j0 _( n2 j4 d% e
 0 _% @0 a* \1 J6 ~5 V
 
. |+ ~* d+ e$ ?& a1 \你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。
/ d1 N/ p9 l9 p/ o2 B& V
9 O$ P' {, `- O+ C/ V 
wuhong377 回答时间:2014-3-27 17:36:12

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

回复第 6 楼 于2014-03-27 15:44:32发表:3 Z6 W  m% S! ]: Q
stm32 收到的数据一直是正确的么?还是也是错位的
# A3 O! M& ^, Q$ M5 U2 Y( E 
) o1 u. o  z) _- U * D% E! J% f# T- T, e- C
中断程序里面使用if(count1==5)的话。手动一次一次发送都是正确的。 如果自动循环发送,速度比较快的话,就可能会出现错位。2 T) O0 O$ L6 `* c2 g7 \$ H; b
 
8 z7 N+ N. k, C% @ 
wuhong377 回答时间:2014-3-27 17:38:13

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

回复第 7 楼 于2014-03-27 16:03:43发表:8 f0 |: ~! f! d0 M0 n; S* b
回复第 5 楼 于2014-03-27 14:37:11发表:
5 E1 N$ U+ f& f回复第 4 楼 于2014-03-27 10:11:31发表:
! h  G. X. E1 R4 O, Y6 s我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
$ E; M0 I- m1 A- `' `( p8 q: e 4 @# W  Y+ S9 y9 B. ^1 g
 ( X. c) U: ~6 v7 k% \" m+ `9 B
 
" v( Q. I. ]( V, b& I我接收了五个字节之后,count1==5之后 就重新将count1==0;  应该不会影响到吧。
8 @# w" k, ]9 F+ t8 s* Y2 H3 O, e 
0 N! q8 [, \; {# b  X2 R 6 H( K% }' y+ [  p9 `
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。
6 L0 `" t9 C" y+ {" S6 H3 ~ 
4 v3 a& q6 {; S7 ?( [/ I 
. M. m& [7 f% B+ v5 D因为我上位机每次就是发五个字节,所以我是想,stm32下位机进入中断后每次固定接收五个字节,然后进行判断再返回ADC采样的数值。
1 `8 k" S: m$ p! H( n
2 }+ g: p" E1 o9 b6 @ - ?8 q* ~& D  x# W* g' p
. F% w4 b9 f- @5 n
 
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;">
# i3 S, a: M/ w; L3 G* O& h回复第 11 楼 于2014-03-27 21:41:44发表:
% Q% t# H1 x& f! r* d7 xfor(count1=0;count1
废鱼 回答时间:2014-3-28 16:17:04

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

1次只能接收1个数据。如果你发送的很快的话,数据会有丢失。可以在中断中处理。0 a! V) Z; R& C  o
if(count1 > 4)
/ T2 O/ D+ t' l) Q{" l. J& C9 S$ L: R) R8 X, y/ [
Uart1_PutString(p , 5);
* P1 D4 M5 O7 `% b- a, s/ Ncount1 = 0;
) m( F& Z1 s* [# x+ T$ T; W) |}
dzc2001 回答时间:2014-4-2 16:47:58

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

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

所属标签

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