
#include #include "hw_config.h" u8 uart1_buf[5];2 c, ^" d- f* {# z int count1=0;& e" N% t6 `" `- r. m* A0 @/ e' T/ a int Flag=0; void Delay(void) {; K$ j2 ~4 h+ P4 D G7 ]6 U int x,y;7 @/ ^9 Y! ?! @; s7 O for(x=1000;x>0;x--) for(y=1000;y>0;y--); } : H) H( `0 ]! s# f int main(void) { 4 N" s/ H" I( } u8 table[5]; u8 *p=table;0 |& ^" ~$ Z+ A+ J$ w- r ; t9 C$ F& g- C) V3 h0 _9 u SystemInit(); /*系统初始化*/% a/ T. \! e0 k1 S$ E( g5 M LED_Configuration(); USART_Configuration(); ADC_Configuration();, A6 J, d$ |* B1 c9 ^! _1 W while (1)( u8 x5 L. ]7 d { LED1(1); Delay(); LED1(0); Delay();6 |6 Z9 S4 Y3 K. @/ s9 ] if(Flag==1)//接收中断" ^" q% t2 I g6 ` {4 Q" I9 i* b& \7 ]8 K L for(count1=0;count1 4)1 Y* F* i1 r( n3 i3 T% o1 Y {# z: L7 G, p6 v! _. W Flag = 1;! k8 b$ q( i O* \. `9 p count1 = 0; } 1 z1 Y; q) C" @3 P! N W7 b }7 _: }7 S+ y0 \$ ^% c' L# s } 我想让stm32实现接收由串口助手发过来的五个字节的数,然后再由stm32返回给串口助手,我这样子写的程序,第一次可以正确的返回发送的五个数,第二次开始就可能会出错。 请问这边的中断程序怎么写,能够让stm32稳定的每次接收五个字节呢? |
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
/ S6 z$ I5 U9 G
1 B2 ~0 P; ^0 U4 v7 ^2 ~$ U9 O+ y6 U
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 4 楼 于2014-03-27 10:11:31发表:3 E6 f8 ~$ a/ B9 f' ?3 L& w
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?0 X3 p4 y# f. U N. }, `5 V
/ c, G4 R( t2 A/ e8 w
7 }. n/ G8 e. R$ F' L6 l
1 g# c, O0 E/ \ M' x+ ^: Y. B
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。2 a4 q) C5 ]& e5 }& m
5 u% x8 V! @7 a
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。
% i& `/ M3 c! X/ k
回复:stm32 串口接收字符串 中断程序怎么写?
stm32 收到的数据一直是正确的么?还是也是错位的" ^' U/ ?; D F7 C- l4 Z e7 Y
4 R' ~& X2 E* ^* K- {$ T1 w7 ^6 ?2 R
中断程序里面使用if(count1==5)的话。手动一次一次发送都是正确的。 如果自动循环发送,速度比较快的话,就可能会出现错位。; i, _6 A6 _ Y
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 5 楼 于2014-03-27 14:37:11发表:
回复第 4 楼 于2014-03-27 10:11:31发表:
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
) e4 v( B2 G( H+ n" \. X( T: O% b/ |
& E: k# x+ e. ], r9 g! e( I
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。4 j" y8 c/ c% b9 e7 }6 N* f6 `: ?6 H
( c# J: j) L( x( p2 U' {& p
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。
6 d# H$ A- f# n) A; _' m$ j. K
因为我上位机每次就是发五个字节,所以我是想,stm32下位机进入中断后每次固定接收五个字节,然后进行判断再返回ADC采样的数值。$ N+ ?3 E( J' D0 V
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 11 楼 于2014-03-27 21:41:44发表:
for(count1=0;count1
RE:stm32 串口接收字符串 中断程序怎么写?
if(count1 > 4)
{% S- }1 W6 d- I2 N
Uart1_PutString(p , 5);
count1 = 0; F$ T( h5 t- B+ T% \0 `1 B
}
RE:stm32 串口接收字符串 中断程序怎么写?