#include #include "hw_config.h" u8 uart1_buf[5];! }( g6 f/ k# x. N$ E8 b8 h6 x! [4 M int count1=0; int Flag=0;% E' i, |5 c% | " e8 S: X' U2 Y void Delay(void) { int x,y;4 _8 H' q5 F' D. X4 B for(x=1000;x>0;x--)7 f. Z* j* n4 D$ c! S0 m for(y=1000;y>0;y--);' d4 h. O% u/ n# F& Z6 i; ~ } , Z: I7 s- o; J$ C5 g# C- U! S int main(void)0 M( k+ p+ e+ O: r { . R& _; B; n5 p/ N( M2 d) y) j2 ] u8 table[5];( u9 u1 N( s7 b0 g" `5 l u8 *p=table;. \$ K- X$ B4 D% F: X: J % C7 k" n5 y: ^( l SystemInit(); /*系统初始化*/ LED_Configuration();% k& ?( [$ x4 Z9 Z: c7 p USART_Configuration();$ q; @" z1 M/ A4 v. @+ C3 b1 F ADC_Configuration(); while (1) {9 B$ S3 |: J5 N) X1 y0 r t. T( T6 @ LED1(1);3 a2 h* i/ t* y3 L7 k Delay(); LED1(0);, N) v, C- Y8 R* w* j Delay();) [- `3 h5 P3 y& ]" G! C4 ~ if(Flag==1)//接收中断0 U! {4 G9 d) }/ _ {5 c. k- h6 r5 Q& C , ~; y3 W" A$ L4 f+ q. Q for(count1=0;count1 4)0 C( ], Y0 _% S6 M6 m {# {4 e# ~8 u% }4 U* Y9 o Flag = 1;% {5 W1 c$ {8 C6 q" Y) N1 B count1 = 0; } } }, B. z1 l* Q! i( ~ 我想让stm32实现接收由串口助手发过来的五个字节的数,然后再由stm32返回给串口助手,我这样子写的程序,第一次可以正确的返回发送的五个数,第二次开始就可能会出错。 请问这边的中断程序怎么写,能够让stm32稳定的每次接收五个字节呢? |
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?
d! T8 s- |3 T7 {/ G, E% ]
9 X0 V. R- A: {0 Q# S; U
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。9 O0 Z, X/ n/ [" Q
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 4 楼 于2014-03-27 10:11:31发表:
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?% r" H; z) V+ @) E
. Y) `0 a: {$ L; y0 H
- w9 ~/ `* Y: I, `
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。
* E# k" B1 H. J. h
6 Y- U" p: n$ m6 E
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。
回复:stm32 串口接收字符串 中断程序怎么写?
stm32 收到的数据一直是正确的么?还是也是错位的) S( l' W1 G7 ^& R6 E% {3 t
" m9 m3 [/ t6 p' L9 k, g
) d0 Z0 P% T ] y7 ^
中断程序里面使用if(count1==5)的话。手动一次一次发送都是正确的。 如果自动循环发送,速度比较快的话,就可能会出现错位。, O" ^$ `% l* @2 c% {2 k
0 P3 f- M9 n `4 D
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 5 楼 于2014-03-27 14:37:11发表:, r6 t' q/ R( E
回复第 4 楼 于2014-03-27 10:11:31发表:4 V" b* f; ~& P* b- T; \, m: q
我不明白,为什么你int count1=0; 就用这个变量呢?你再申请一个好了,你在主函数里面if(Flag==1)//接收中断下,count1已经变成5了。。你说到中断函数里面怎么处理?4 u0 I' P0 p* \- [3 O& \
/ p! ~, g0 Z Z$ Q/ ^
我接收了五个字节之后,count1==5之后 就重新将count1==0; 应该不会影响到吧。- u( y" H: R6 s# v8 F+ _( l
; d) D1 W6 ]8 Y( h$ B
你是不是想搞个入队出队呢,,你发出去5个数据,你得让你的头地址减掉呀。
因为我上位机每次就是发五个字节,所以我是想,stm32下位机进入中断后每次固定接收五个字节,然后进行判断再返回ADC采样的数值。
/ {5 g5 |" W, h$ T, h+ \& x
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
RE:stm32 串口接收字符串 中断程序怎么写?
回复:stm32 串口接收字符串 中断程序怎么写?
回复第 11 楼 于2014-03-27 21:41:44发表:* a; N* v* q7 N4 b6 _0 q
for(count1=0;count1
RE:stm32 串口接收字符串 中断程序怎么写?
if(count1 > 4)
{
Uart1_PutString(p , 5);8 M" B& w9 g! ^9 n, E# _+ z5 A) N3 x
count1 = 0;
}
RE:stm32 串口接收字符串 中断程序怎么写?