#include #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; int Flag=0; ! t3 u2 D/ r4 Q: ]5 c6 o% |% @* p void Delay(void). |' S# {$ p) H: q { int x,y; for(x=1000;x>0;x--) for(y=1000;y>0;y--);' a0 ?; f5 q$ Q: R+ v# N } ! a# J7 e1 y5 V! Y$ F int main(void) { : v& y! ]8 w6 w5 j1 R 8 s& U! U- f. W5 a' g u8 table[5]; u8 *p=table; 2 g( x6 F0 h" p9 O9 v SystemInit(); /*系统初始化*/ LED_Configuration();3 N; |5 B- b9 A4 T USART_Configuration();: v4 x3 G4 r0 O8 A. b6 |5 y* ~, u! i ADC_Configuration(); while (1) { |- Z# _ {& u9 H/ V LED1(1);/ D: d2 W d2 F Delay(); LED1(0); Delay();0 }6 M& e( g$ P+ h9 p! J# Y+ L if(Flag==1)//接收中断/ H( n" A+ J8 u4 ^6 `. B { for(count1=0;count1 4) { Flag = 1;0 G. g$ ^7 o6 G' r) \0 } count1 = 0;3 u/ W& M5 G9 R% _' w } % i6 f3 }# g/ e5 H& v1 C } } 我想让stm32实现接收由串口助手发过来的五个字节的数,然后再由stm32返回给串口助手,我这样子写的程序,第一次可以正确的返回发送的五个数,第二次开始就可能会出错。 请问这边的中断程序怎么写,能够让stm32稳定的每次接收五个字节呢? |
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?- z, B3 {9 W) u" u& s. L
% R; Y1 F% I4 C0 Q( g
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 4 楼 于2014-03-27 10:11:31发表:
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?+ D' F0 G: f9 `0 E: {
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。* t/ \) E l- T) H( ~
+ C: Y% V) s+ `& _& [
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。9 i; G5 B2 K! c# ~, D) c
/ \# O( `% S' @% n0 Z; o' }
回复:stm32 串口接收字符串 中断程序怎么写?
stm32 收到的数据一直是正确的么?还是也是错位的
) t& }! Z$ k2 H7 i! R) ]
中断程序里面使用if(count1==5)的话。手动一次一次发送都是正确的。 如果自动循环发送,速度比较快的话,就可能会出现错位。 g4 x, w# L( a! X. Z/ @; X
( N4 [6 M' H/ w
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 5 楼 于2014-03-27 14:37:11发表:! L+ x; i1 s% o" k: }+ P* n
回复第 4 楼 于2014-03-27 10:11:31发表:
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
# J) m; e% v" N1 \% X; I
4 o1 g4 w3 r' X
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。$ j& I* }! v& }9 R; e
/ 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
( B6 h7 O- a- K4 }4 D+ f7 \# h
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 11 楼 于2014-03-27 21:41:44发表:
for(count1=0;count1
RE:stm32 串口接收字符串 中断程序怎么写?
if(count1 > 4) Y6 l( n- G% w: o# k1 }$ z
{
Uart1_PutString(p , 5);
count1 = 0;& @: L( s8 p2 C: y
}
RE:stm32 串口接收字符串 中断程序怎么写?