|
#include 8 [0 ^8 K5 M5 \, w #include "hw_config.h" u8 uart1_buf[5]; int count1=0;( M6 T) _4 D/ F int Flag=0;: |3 O2 s. P- q- o2 Q7 G r void Delay(void) { int x,y; for(x=1000;x>0;x--); U& H/ o! O. r* V3 a" d for(y=1000;y>0;y--); }. x- Z# y4 `& P' O ! @3 o* I7 p0 J5 T# H* N; P7 O int main(void) { : T4 i2 O3 ^; H7 `# e4 \2 C 7 A# g% O5 B: @+ E u8 table[5];6 r0 h2 y, I5 Z- W' I u8 *p=table; SystemInit(); /*系统初始化*/ LED_Configuration(); USART_Configuration();8 ]0 \) g) ]$ L% E K7 } ADC_Configuration(); while (1)$ O$ e3 O P; G4 z% M. |- z0 z {5 F+ `9 l7 Z' Q% `6 O# x LED1(1); Delay();* T+ a' i0 _/ p' L% C- _ LED1(0);, q. E6 ]. k i) G+ a$ ~ Delay();3 L) D* m0 t V6 G if(Flag==1)//接收中断2 U" @0 ^% t8 O E! `& I { for(count1=0;count1 4), u4 F, r: ^# _ { Flag = 1;! n6 }$ E5 u3 E# l0 X count1 = 0; } 4 G. t6 y( H6 I" V } } 我想让stm32实现接收由串口助手发过来的五个字节的数,然后再由stm32返回给串口助手,我这样子写的程序,第一次可以正确的返回发送的五个数,第二次开始就可能会出错。 请问这边的中断程序怎么写,能够让stm32稳定的每次接收五个字节呢? |
微信公众号
手机版
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?9 c2 J; X; C# `/ B h4 r, |
" |- u6 q! F: h* Z$ |9 S4 j! m: x }
% c9 ?8 z# {: G V, G) t
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。; X0 ]' W) K* G; v- V
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 4 楼 于2014-03-27 10:11:31发表:' h* b3 P! J6 D' |
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?2 T7 ^/ Z/ y5 _% Z1 c Q
9 U" U0 P7 [9 S: |1 J( o# @
' c1 X% m: Z& i
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。9 V% p( L8 @- r- }9 V$ S
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。- Z0 n! m7 h D! r% c& `# [4 ]
回复:stm32 串口接收字符串 中断程序怎么写?
stm32 收到的数据一直是正确的么?还是也是错位的; w' ?5 a& X! H2 D* g9 k" Z
) ~" @5 x' ?/ z3 g' m/ f0 ~
中断程序里面使用if(count1==5)的话。手动一次一次发送都是正确的。 如果自动循环发送,速度比较快的话,就可能会出现错位。# A+ F3 R# v' B8 V+ ?% J
2 [. e8 h2 I5 r5 o! _
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 5 楼 于2014-03-27 14:37:11发表:
回复第 4 楼 于2014-03-27 10:11:31发表:
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?: B, b: _, a+ q9 t7 x& ^
. B- a8 P; @( } m
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。
因为我上位机每次就是发五个字节,所以我是想,stm32下位机进入中断后每次固定接收五个字节,然后进行判断再返回ADC采样的数值。$ }& @, Z& T, }6 D) H
* L4 J" {; v7 R: g+ s: B
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 11 楼 于2014-03-27 21:41:44发表:
for(count1=0;count1
RE:stm32 串口接收字符串 中断程序怎么写?
if(count1 > 4)7 f; U6 T' a+ ?# H; J9 \6 x3 Z
{
Uart1_PutString(p , 5);
count1 = 0;
}
RE:stm32 串口接收字符串 中断程序怎么写?