OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17010|回复: 21

原子哥,我想请问下如何在stm32通过串口传输数组,有这样的函数么

[复制链接]

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
发表于 2013-11-15 12:40:17 | 显示全部楼层 |阅读模式
原子哥,我想请问下如何在stm32通过串口传输数组,有这样的函数么
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-15 12:44:10 | 显示全部楼层
回复【楼主位】冷枫林:
---------------------------------
就是那种直接通过数组名传递的、、、---------------------------------
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-15 13:11:25 | 显示全部楼层

USART_SendData(USART1,0x00) ;
    USART_SendData(USART1,0x01) ;
    USART_SendData(USART1,0x02) ;         这样通过上位机收到的只是02并不是00 01 02


 USART_SendData(USART1,0x00) ;
    delay_ms(1);
    USART_SendData(USART1,0x01) ;
    delay_ms(1);
    USART_SendData(USART1,0x02) ;
   delay_ms(1);                                      这样收到的才是00 01 02

原子哥,我在搞一个rfid模块,类似于公交刷卡的东西,我要发送的指令在51上都是以数组的形式发送,如果加入延时函数的话,指令就会被打散不能用,怎么样能一次性全部发过去啊

回复 支持 反对

使用道具 举报

19

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
512
金钱
512
注册时间
2012-11-18
在线时间
72 小时
发表于 2013-11-15 13:29:04 | 显示全部楼层
void UartASendStr (u8 *pucStr, u8 ulNum)
{
u8 i;
for(i = 0;i<ulNum;i++)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); 
    USART_SendData(USART1,*pucStr++);

}

void ACK(u8 func)
{
u8 data[5];
data[0]=0x55;
data[1]=0xAA;
data[2]=func;
data[3]=0xFF;
data[4]=0xEF;
UartASendStr(data,5);
}>
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-15 13:29:23 | 显示全部楼层
我好像懂了,寄存器版本的串口里面应该有、、、没事了原子哥
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-15 13:30:52 | 显示全部楼层
回复【4楼】lansing1648:
---------------------------------
谢谢,我试试*^_^*
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-15 13:51:09 | 显示全部楼层
回复【4楼】lansing1648:
------------------------------
非常感谢,,,帮了我好大的忙,,我还有个小问题,,就是接收rfid模块回复的数组用stm32怎么接收啊,
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-11-15 14:14:56 | 显示全部楼层
回复【7楼】冷枫林:
---------------------------------
类似于发送那样
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-15 14:25:19 | 显示全部楼层
回复【8楼】Badu_Space:
---------------------------------
ok,,我试试,这种东西也不能总依赖别人,谢谢了
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-15 14:57:13 | 显示全部楼层

u8* UartAReceiveStr (u8 ulNum)
{
 u8* a;
 u8 i;
 for(i = 0;i<ulNum;i++)
 {
 while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET); 
  a= USART_ReceiveData(USART1);
 } 
 return a;
}

这个对不对啊,,貌似不对,我设了一个u8 k[13]的数组来接收rfid模块返回的数据k=UartAReceiveStr (13);结果报错
 

大神们求解惑啊、、、

回复 支持 反对

使用道具 举报

9

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-9-24
在线时间
0 小时
发表于 2013-11-15 15:47:26 | 显示全部楼层
回复【10楼】冷枫林:
---------------------------------
。。亲。。。数组能这样赋值啊?  K=UartAReceiveStr (13);?
人需要沐浴阳光,也必将经历风雨
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-15 15:51:40 | 显示全部楼层
回复【11楼】LOVE_FYD:
---------------------------------
我是定义的指针u8*a
然后a=UartAReceiveStr (13)
回复 支持 反对

使用道具 举报

9

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-9-24
在线时间
0 小时
发表于 2013-11-15 16:03:46 | 显示全部楼层
回复【12楼】冷枫林:
---------------------------------
但是你返回的是局部指针,当函数结束的时候,局部指针的内存已经被释放了。。那块地址可能已经被别的变量给代替了。。因此编译是通不过的
人需要沐浴阳光,也必将经历风雨
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-15 16:16:37 | 显示全部楼层
回复【13楼】LOVE_FYD:
---------------------------------
编译通过了、、、、、、、、但是此时我无法验证收到的消息是不是对的,,,因为我用的战舰板子上的液晶一调用我写的这个鬼东西就不显示了、、、我现在要崩溃了
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-15 16:17:14 | 显示全部楼层

             u8* UartAReceiveStr (u8 ulNum)
{
 u8* a;
 u8 i;
 for(i = 0;i<ulNum;i++)
 {
 while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET); 
  a= USART_ReceiveData(USART1);
 } 
 return a;
}

原子哥这个是不是对的额、、、、、、、

回复 支持 反对

使用道具 举报

9

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-9-24
在线时间
0 小时
发表于 2013-11-15 16:27:51 | 显示全部楼层
函数本身没错。。但是你返回局部指针就有问题了,会出现意想不到的错误。。。建议不要这么写
人需要沐浴阳光,也必将经历风雨
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-11-16 08:33:46 | 显示全部楼层
回复【15楼】冷枫林:
---------------------------------
void UartAReceiveStr (u8 *ulNum,u8 len) 


?u8 i;
?for(i = 0;i<len;i++) 
?{ 
?while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET);? 
??ulNum= USART_ReceiveData(USART1);
?}? 

}
这样些方便很多>
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-10-2
在线时间
0 小时
 楼主| 发表于 2013-11-16 09:40:24 | 显示全部楼层
回复【17楼】Badu_Space:
----------------------------恩恩,谢了
回复 支持 反对

使用道具 举报

0

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2016-12-22
在线时间
15 小时
发表于 2017-2-7 16:12:51 | 显示全部楼层
ReadData
回复 支持 反对

使用道具 举报

7

主题

34

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2018-3-2
在线时间
37 小时
发表于 2020-2-11 15:31:05 | 显示全部楼层
本帖最后由 Li9758 于 2020-2-11 15:37 编辑
lansing1648 发表于 2013-11-15 13:29
void UartASendStr (u8 *pucStr, u8 ulNum)
{
        u8 i;
        for(i = 0 ...

ACK(u8 func);在使用的时候,u8 func这个改成什么?
回复 支持 反对

使用道具 举报

48

主题

179

帖子

0

精华

初级会员

Rank: 2

积分
185
金钱
185
注册时间
2017-6-19
在线时间
90 小时
发表于 2020-7-10 17:29:45 | 显示全部楼层
lansing1648 发表于 2013-11-15 13:29
void&nbsp;UartASendStr&nbsp;(u8&nbsp;*pucStr,&nbsp;u8&nbsp;ulNum)
{
        u8&nbsp;i;
        for(i&nbsp;=&nbsp;0 ...

请问ACK(u8 func)这个函数应该在哪调用?UartASendStr(data,5); 这个函数查找不到其定义?
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-10-13
在线时间
9 小时
发表于 2020-10-15 13:17:43 | 显示全部楼层
lansing1648 发表于 2013-11-15 13:29
void&nbsp;UartASendStr&nbsp;(u8&nbsp;*pucStr,&nbsp;u8&nbsp;ulNum)
{
        u8&nbsp;i;
        for(i&nbsp;=&nbsp;0 ...

你好,我也是这么写的,为什么发送出去的信息,在电脑上收到的就不一样了呢,比如发出去的是
rs485buf[0]=0x0e;
rs485buf[1]=0x0a;
rs485buf[2]=0x0b;
rs485buf[3]=0x0c;
rs485buf[4]=0x0d;
电脑上收到的有时候是
3C 3D 7A 9E DE
有时候又是
E3 D6 D2 CE CA FF
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 06:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表