野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9369|回复: 8

DMA串口发送16进制数值出错,不知如何定义十六进制数组啊?

[复制链接]
发表于 2018-6-2 21:54:40 | 显示全部楼层 |阅读模式
请教:野火教程DMA to USART例程里,
main.c 里定义要串口发送的数值:
extern uint16_t SendBuff[SENDBUFF_SIZE];
for(i=0; i<SENDBUFF_SIZE; i++)
    {
        SendBuff = 'c';
    }

我要发送一组十六进制值:EE,B1,11,00,01,00,02,11,37,34,00,FF,FC,FF,FF,我将SendBuff[SENDBUFF_SIZE]这样赋值:
SendBuff[SENDBUFF_SIZE]={0xEE,0xB1,0x11,0x00,0x01,0x00,0x02,0x11,0x37,0x34,0x00,0xFF,0XFC,0XFF,0XFF};
提示编译有错误,去掉extern uint16_t SendBuff[SENDBUFF_SIZE]这一句,在SendBuff[SENDBUFF_SIZE]={0xEE,0xB1,0x11,0x00,0x01,0x00,0x02,0x11,0x37,0x34,0x00,0xFF,0XFC,0XFF,0XFF}前加extern,或const,或 uint16_t都没用,都是提示有error,不知道怎么回事啊?折腾了两天了

如果不用extern,直接这样uint16_t  SendBuff[SENDBUFF_SIZE]={0xEE,0xB1,0x11,0x00,0x01,0x00,0x02,0x11,0x37,0x34,0x00,0xFF,0XFC,0XFF,0XFF};编译无error,但有警告,下载后STM32串口输出全都是00.

另外,如果我单独给每个数组赋值,编译没错误警告问题,如:
    SendBuff[0]=0xEE;
    SendBuff[1]=0xB1;
    SendBuff[2]=0x11;
    ......
    SendBuff[13]=0xFF;
    SendBuff[14]=0xFF;
编译下载后,串口输出的是3F 3F 11 00 00 00 01 00 00 00 02 00 11,也不是我期望的值。

bsp_dma_mtp.c没改动,bsp_dma_mtp.h里改了一个#define  SENDBUFF_SIZE          30,其他没有任何变动
不知道怎么回事啊?折腾了两天了。
回复

使用道具 举报

发表于 2018-6-2 22:12:01 | 显示全部楼层
C语言不过关,定义数组这种事情百度还快些吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-2 22:26:57 | 显示全部楼层
浪费 发表于 2018-6-2 22:12
C语言不过关,定义数组这种事情百度还快些吧

就是百度解决不了才来论坛求助的。
主要是新手,不熟悉啊。
回复 支持 反对

使用道具 举报

发表于 2018-6-2 23:16:24 | 显示全部楼层
for(i=0; i<SENDBUFF_SIZE; i++)
    {
        SendBuff = 'c';
    }
这是什么意思?
把工程发上来,给你看看吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-3 09:58:06 | 显示全部楼层

这个是野火的例程里的。我只是想在此基础上修改一下要发送的数据。请见附件,帮忙看一下。

22-DMA-M2P-demo.rar

4.13 MB, 下载次数: 27

回复 支持 反对

使用道具 举报

发表于 2018-6-3 11:03:17 | 显示全部楼层
我改了,我这边没问题,你试试

串口输出

串口输出

22-DMA-M2P-demo.rar

4.24 MB, 下载次数: 82

回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-3 20:54:54 | 显示全部楼层
本帖最后由 dashiz 于 2018-6-3 21:51 编辑
浪费 发表于 2018-6-3 11:03
我改了,我这边没问题,你试试

试了一下,真可以工作。太感谢了。

不过年有空解释一下为什么把SendBuff[]赋值数组从main.c移到bsp_dma_mtp.c里?你们串口编程时一般把发送和接收数据的代码放在main.c里吗?
还有#define  SENDBUFF_SIZE         (sizeof(SendBuff)/sizeof(uint8_t))这是啥意思?

不好意思,嘿嘿,新手不懂得太多了
回复 支持 反对

使用道具 举报

发表于 2018-6-3 22:27:56 | 显示全部楼层
你发的工程 uint16_t SendBuff[SENDBUFF_SIZE] 就是定义在 bsp_dma_mtp.c里的,我只是把数据移过去了而已,因为DMA初始化的时候用到SendBuff地址了,
如果不放在bsp_dma_mtp.c,自己去学习下关键词 extern怎么使用吧。
#define  SENDBUFF_SIZE         (sizeof(SendBuff)/sizeof(uint8_t))   
DMA初始化时需要传输的个数,懒得数你这有多少字节,就用这种方式计算了数组有好多个元素
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-4 09:00:38 | 显示全部楼层
浪费 发表于 2018-6-3 22:27
你发的工程 uint16_t SendBuff[SENDBUFF_SIZE] 就是定义在 bsp_dma_mtp.c里的,我只是把数据移过去了而已, ...

多谢热心人。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-3-29 16:55 , Processed in 0.032938 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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