
#include ' Q2 l$ E Y- N t #include "hw_config.h" u8 uart1_buf[5]; int count1=0; int Flag=0;8 |' N* v/ ~; m$ a6 ~ void 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 } int main(void) { % 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(); /*系统初始化*/ LED_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(); if(Flag==1)//接收中断; ~7 P* Y+ a- u8 |9 r* M# C T. o { for(count1=0;count1 4) { Flag = 1;3 f5 a6 f2 o8 ~0 @; W9 g count1 = 0; } }& F% N1 J* K4 i" X }" O' D0 j# n8 m7 d1 x 我想让stm32实现接收由串口助手发过来的五个字节的数,然后再由stm32返回给串口助手,我这样子写的程序,第一次可以正确的返回发送的五个数,第二次开始就可能会出错。 请问这边的中断程序怎么写,能够让stm32稳定的每次接收五个字节呢? |
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?( H) J4 f7 d/ |) r# E* T
1 \2 A! `3 i" d$ o/ D% Q) V
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。4 b+ ?5 W" @9 A/ c, W! y
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 4 楼 于2014-03-27 10:11:31发表:
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?. u7 p( M. Z2 {% H
+ D! Y% h. d9 w. C$ W% D2 X
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。# j0 _( n2 j4 d% e
0 _% @0 a* \1 J6 ~5 V
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。
回复:stm32 串口接收字符串 中断程序怎么写?
stm32 收到的数据一直是正确的么?还是也是错位的
* D% E! J% f# T- T, e- C
中断程序里面使用if(count1==5)的话。手动一次一次发送都是正确的。 如果自动循环发送,速度比较快的话,就可能会出现错位。2 T) O0 O$ L6 `* c2 g7 \$ H; b
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 5 楼 于2014-03-27 14:37:11发表:
回复第 4 楼 于2014-03-27 10:11:31发表:
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
4 @# W Y+ S9 y9 B. ^1 g
( X. c) U: ~6 v7 k% \" m+ `9 B
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。
6 H( K% }' y+ [ p9 `
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。
因为我上位机每次就是发五个字节,所以我是想,stm32下位机进入中断后每次固定接收五个字节,然后进行判断再返回ADC采样的数值。
- ?8 q* ~& D x# W* g' p
. F% w4 b9 f- @5 n
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 11 楼 于2014-03-27 21:41:44发表:
for(count1=0;count1
RE:stm32 串口接收字符串 中断程序怎么写?
if(count1 > 4)
{" l. J& C9 S$ L: R) R8 X, y/ [
Uart1_PutString(p , 5);
count1 = 0;
}
RE:stm32 串口接收字符串 中断程序怎么写?