OpenEdv-开源电子网

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

想通过串口1接收一段数组,并且把这段数组中的5个字符提取出来,并且倒置显示出来,现在有两段小程序,大家帮我指导一下

[复制链接]

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
发表于 2018-8-17 13:11:08 | 显示全部楼层 |阅读模式
1金钱
[mw_shl_code=applescript,true]//°ÑDèòaμı¨ÎÄêy×éìáè¡3öà′
void tiqushuju(u8 *pucStr, u8 ulNum)
{

        u8 i;
        pucStr=USART_ReceiveData(USART1);
  for(i = 0; i < ulNum; i++)
     {       USART_RX_BUF = pucStr[i + 19];
     }
                 
                //         return USART_RX_BUF;

}

//ìáè&#161;3&#246;à′μ&#196;êy×é&#189;&#248;DDμ1&#214;&#195;
void send_date(char *buf, int size)
{
        int i = 0;
        int temp;
        for(;i<size/2; i++)
        {

                temp = buf;
                buf = buf[size-i-1];
                buf[size-i-1] = temp;
        }
                       
}[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-8-17 15:59:14 | 显示全部楼层
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-17 17:04:28 | 显示全部楼层
要懂ARM, 就必需懂汇编
同一个功能, 汇编一条子令就完成
去看看  REV 子令, 也可以顺带学一下汇编
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-17 17:13:28 | 显示全部楼层
u32 GetInvEndian(u32 val){

    __asm{
        rev.w     R0, val
   }

}
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-17 19:26:23 | 显示全部楼层
表示根据楼主提供的程序看不懂要做什么,逻辑都是乱套的。

给一段参考程序吧,信手所敲,可能会有语法错误,仅供参考。

[mw_shl_code=c,true]//这个函数应该在串口的一段数组接收完成之后调用
void functionDemo(void)
{
  int i;
  //进入这个函数说明数组接收完成了
  //直接将串口接收到的前5个字符倒序输出,假设printf已经被正确重定向
  for(i=4;i>=0;i--)
  {
    printf("%c",USART_RX_BUF);
  }

  //输出完毕,串口接收的状态复位,准备进行下一次接收
  USART_RX_STA=0;
}[/mw_shl_code]
十六进制带我飞。
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-18 08:35:46 | 显示全部楼层
DreamWaterPro 发表于 2018-8-17 19:26
表示根据楼主提供的程序看不懂要做什么,逻辑都是乱套的。

给一段参考程序吧,信手所敲,可能会有语法错 ...

确实逻辑没有表达清楚,有点着急了,就是一个数组取后面五个字符之后,再进行倒置,然后传到串口调试助手里,希望能提供一段可参考的代码
回复

使用道具 举报

头像被屏蔽

12

主题

167

帖子

0

精华

禁止访问

积分
517
金钱
517
注册时间
2017-5-30
在线时间
110 小时
发表于 2018-8-18 08:42:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-18 08:49:22 | 显示全部楼层
支持者2400 发表于 2018-8-18 08:35
确实逻辑没有表达清楚,有点着急了,就是一个数组取后面五个字符之后,再进行倒置,然后传到串口调试助手 ...

按字节倒置?
十六进制带我飞。
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-18 08:58:31 | 显示全部楼层

比如说我要对0X23、0X34、0X45,进行倒置,结果就是0X45、0X34、0X23
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-18 09:00:43 | 显示全部楼层
DreamWaterPro 发表于 2018-8-17 19:26
表示根据楼主提供的程序看不懂要做什么,逻辑都是乱套的。

给一段参考程序吧,信手所敲,可能会有语法错 ...

串口接收到数据,如何对接收的数据进行处理呢,这方面不太懂,能提供代码参考吗
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-18 09:02:58 | 显示全部楼层
支持者2400 发表于 2018-8-18 09:00
串口接收到数据,如何对接收的数据进行处理呢,这方面不太懂,能提供代码参考吗

我提供的那个就是。。。算了我给你写个工程,稍等
十六进制带我飞。
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-18 09:13:06 | 显示全部楼层
DreamWaterPro 发表于 2018-8-18 09:02
我提供的那个就是。。。算了我给你写个工程,稍等

谢谢大神,我这水平不行啊
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-18 09:18:40 | 显示全部楼层
本帖最后由 DreamWaterPro 于 2018-8-18 09:19 编辑

楼主要的是这个效果吧: TIM截图20180818091646.png

程序基于战舰板的串口实验进行简单的修改,修改的部分全部都在main.c中。

基于战舰板串口实验修改.zip (310.93 KB, 下载次数: 32)
十六进制带我飞。
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-18 09:25:34 | 显示全部楼层
DreamWaterPro 发表于 2018-8-18 09:18
楼主要的是这个效果吧:

程序基于战舰板的串口实验进行简单的修改,修改的部分全部都在main.c中。

这个数组的结果也没倒置啊
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-18 09:29:01 | 显示全部楼层
支持者2400 发表于 2018-8-18 09:25
这个数组的结果也没倒置啊

倒置显示,有不对吗?
十六进制带我飞。
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4521
金钱
4521
注册时间
2018-5-11
在线时间
946 小时
发表于 2018-8-18 09:31:13 | 显示全部楼层
本帖最后由 warship 于 2018-8-18 16:28 编辑

u8 *p1, *p2;
int i;
p1=第一个元素的地址;
p2=p1+4;
for(i=0;i<2;i++)
{
*(p1+i)=*(p1+i)^*(p2-i);
*(p2-i)=*(p1+i)^*(p2-i);
*(p1+i)=*(p1+i)^*(p2-i);
}
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-18 09:31:33 | 显示全部楼层
DreamWaterPro 发表于 2018-8-18 09:29
倒置显示,有不对吗?

发送的23456吗
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-18 09:34:45 | 显示全部楼层

发送的是123456,ASCII码。
第二次发送的是This is test text. 然后倒置显示为.txet
请亲自试一下。
十六进制带我飞。
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-18 09:43:07 | 显示全部楼层
DreamWaterPro 发表于 2018-8-18 09:34
发送的是123456,ASCII码。
第二次发送的是This is test text. 然后倒置显示为.txet
请亲自试一下。

谢谢您提供代码,假如我不想用串口调试助手显示,想在原子战舰的TFT-LCD上显示倒置后的数组,LCD_ShowString(30,130,200,12,12,"USART_RX_BUF[len-1-i]");这样可以吗
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-18 11:08:26 | 显示全部楼层
支持者2400 发表于 2018-8-18 09:43
谢谢您提供代码,假如我不想用串口调试助手显示,想在原子战舰的TFT-LCD上显示倒置后的数组,LCD_ShowStr ...

可以的,这种事情试试就知道了
十六进制带我飞。
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-18 11:08:28 | 显示全部楼层
支持者2400 发表于 2018-8-18 09:43
谢谢您提供代码,假如我不想用串口调试助手显示,想在原子战舰的TFT-LCD上显示倒置后的数组,LCD_ShowStr ...

可以的,这种事情试试就知道了
十六进制带我飞。
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-18 13:29:16 | 显示全部楼层
DreamWaterPro 发表于 2018-8-18 11:08
可以的,这种事情试试就知道了

但是我这样做了,没显示啊
回复

使用道具 举报

2

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2017-8-20
在线时间
49 小时
发表于 2018-8-18 14:09:33 | 显示全部楼层
假设你RX DMA传输中断的数组为
  u8 RX_5data[5];
假设你TX DMA传输的数组为
u8 TX_5data[5];
假设你RX DMA传输中断传输使能位为
u8 RX_5data_dma_en    //在RX DMA中断处理无需这个,在主函数循环查询时用这
u8 TX_5data_dma_en    //在RX DMA中断处理无需这个,在主函数循环查询时用这


if(RX_5data_dma_en == 1)
{
    RX_5data_dma_en = 0;
    for(u8 i=0;i<5;i++)
        {
            TX_5data[4-i] = RX_5data[i];   //5字节数据倒置.
        }
   //以下使能 TX发送位,
  TX_5data_dma_en = 1;
  ********
}

if(TX_5data_dma_en == 1)
{
   发送需的程序
   TX_5data_dma_en = 0;
}

//在DMA接收中断加上

{
   RX_5data_dma_en = 1;
}
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-18 14:26:41 | 显示全部楼层
支持者2400 发表于 2018-8-18 13:29
但是我这样做了,没显示啊

我知道了。。。
不过不应该没显示,最起码你应该能显示出来USART_RX_BUF[len-1-i]这个字符串。
如果真的没显示,尝试使用这个函数显示别的字符串,如果不行,说明显示部分不好使,和这里无关。

假设显示能用,你可以先用一个字符串数组保存倒置之后内容,在最后加一个\0
然后显示这个数组,不要加引号。
十六进制带我飞。
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-18 15:10:44 | 显示全部楼层
DreamWaterPro 发表于 2018-8-18 14:26
我知道了。。。
不过不应该没显示,最起码你应该能显示出来USART_RX_BUF[len-1-i]这个字符串。
如果真 ...

谢谢了,我水平较低,尤其C语言
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-18 15:10:58 | 显示全部楼层
中技电子实验室 发表于 2018-8-18 14:09
假设你RX DMA传输中断的数组为
  u8 RX_5data[5];
假设你TX DMA传输的数组为

谢谢大神的代码
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4521
金钱
4521
注册时间
2018-5-11
在线时间
946 小时
发表于 2018-8-18 16:24:06 | 显示全部楼层
本帖最后由 warship 于 2018-8-18 16:27 编辑

真的是服了,我16楼给了你代码,你是看也不看哦。
假设你要倒置的数组为u8 aaa[5];
u8 *p1, *p2;
int i;
p1=aaa;
p2=p1+4;
for(i=0;i<2;i++)
{
*(p1+i)=*(p1+i)^*(p2-i);
*(p2-i)=*(p1+i)^*(p2-i);
*(p1+i)=*(p1+i)^*(p2-i);
}
保证按你的要求倒置过来了。不光是5个,就是50个(变两个参数)也没有问题了,
你以为我是来捣乱的么?
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-20 08:15:24 | 显示全部楼层
warship 发表于 2018-8-18 16:24
真的是服了,我16楼给了你代码,你是看也不看哦。
假设你要倒置的数组为u8 aaa[5];
u8 *p1, *p2;

不好意思啊,马虎了,没看到
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-8-20 09:00:47 | 显示全部楼层
支持者2400 发表于 2018-8-20 08:15
不好意思啊,马虎了,没看到

老哥.......搞完这个   先去练练C语言,你这程序逻辑都有问题,根本没有倒序
猪猪熊呢?
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2018-8-20 10:19:53 | 显示全部楼层
323232 发表于 2018-8-20 09:00
老哥.......搞完这个   先去练练C语言,你这程序逻辑都有问题,根本没有倒序

好好,确实应该练练
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 20:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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