打印

关于串口发送函数的问题

[复制链接]
895|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djz1992|  楼主 | 2016-5-12 15:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 djz1992 于 2016-5-12 15:36 编辑

我之前用过的这个GPRSsend函数发送unsigned int a【4】这个数组,是可以的

最近我在用显示屏的时候需要发送一个字符串“SBC(52);DS16(50,20,'???V',4,0);\r\n”,
用sprintf(buf,"SBC(52);DS16(50,20,'%.3fV',4,0);\r\n",vlotage);来把float的电压值变作一个字符串,放到buf数组里
但是出现报错

就算我把buf写成固定的四个数的数组,还是不可以,这是为什么呢?


问题
1.如上
2.直接发送一个字符串该怎么写?UART_Send("12345",5)   这样吗?




相关帖子

沙发
djz1992|  楼主 | 2016-5-12 15:36 | 只看该作者
@xyz549040622 @dirtwillfly 两位大神,小弟又来了

使用特权

评论回复
板凳
mohanwei| | 2016-5-12 16:20 | 只看该作者
查一下串口FIFO的长度……
假设是16字节,你一次发送4字节当然没问题,发送超过16字节就会溢出
还有你往一个4字节的buf里塞几十字节,会把buff后面定义的一堆变量都覆盖,鬼知道会出现什么后果

使用特权

评论回复
地板
zhangbo1985| | 2016-5-12 17:11 | 只看该作者
这个法送字符串的,末尾部分是不是需要再加上回车换行的呢?

使用特权

评论回复
5
dirtwillfly| | 2016-5-12 17:17 | 只看该作者
楼上说的是。
你注意一下UARTCharPut这个函数,好像在发送完毕之前是不会返回的。
发送字符串也可以考虑用UARTCharPutNonBlocking()

使用特权

评论回复
6
djz1992|  楼主 | 2016-5-13 08:21 | 只看该作者
本帖最后由 djz1992 于 2016-5-13 08:36 编辑
mohanwei 发表于 2016-5-12 16:20
查一下串口FIFO的长度……
假设是16字节,你一次发送4字节当然没问题,发送超过16字节就会溢出
还有你往一 ...
这是我的报错

fifo长度也许是这个问题,下面是TI一个案例的代码,这串中文肯定比我的长,都是默认的fifo长度
四个字的buf那段我就放了四个数,一大串赋值是注释掉的

使用特权

评论回复
7
djz1992|  楼主 | 2016-5-13 08:23 | 只看该作者
zhangbo1985 发表于 2016-5-12 17:11
这个法送字符串的,末尾部分是不是需要再加上回车换行的呢?

\r\n不就是回车换行么,这四个符号也是按字符发送的吧,我看见TI的案例里发字符串也没见要回车换行,这个发送函数有lenth这个长度控制,lenth--完毕就不会再发了

使用特权

评论回复
8
djz1992|  楼主 | 2016-5-13 08:25 | 只看该作者
本帖最后由 djz1992 于 2016-5-13 08:37 编辑
dirtwillfly 发表于 2016-5-12 17:17
楼上说的是。
你注意一下UARTCharPut这个函数,好像在发送完毕之前是不会返回的。
发送字符串也可以考虑用U ...
这是我的报错
UARTcharput和UARTCharPutNonBlocking()的区别就是后者有返回是否正确存入fifo,有true和false的返回值,其他没什么区别。也许我可以用UARTCharPutNonBlocking()来看看是不是返回的false
void UARTCharPut(uint32_t ui32Base,unsigned char ucData),这是函数的申明,为什么我用  *数组名++  这样的表达方式会报错?
*不是取值么?数组名不是首地址么,*数组名,不就是取出的一个unsigned char的值么,为什么报错呢


使用特权

评论回复
9
xyz549040622| | 2016-5-13 09:32 | 只看该作者
TIVA中的例程用的是
    UARTprintf("  Input Pin: Internal temperature sensor\n\n");

你可以看看这个函数的原型,就知道字符串如何发送了。
至于你为什么报错,要看你的报错提示信息,无法判断。
单个字符的发送,可以用
UARTCharPut
UARTCharPutNonBlocking

这两个函数。

使用特权

评论回复
10
hgjinwei| | 2016-5-13 10:46 | 只看该作者
uint8_t buf[4];
UARTCharPut(UART2_BASE, *buf++); ????? buf 是数组,不是指针,注意语法;

可以这样
uint8_t __buf__[4];
uint8_t *buf = __buf__;
UARTCharPut(UART2_BASE, *buf++);

但不能让数组++

使用特权

评论回复
11
djz1992|  楼主 | 2016-5-13 12:57 | 只看该作者
hgjinwei 发表于 2016-5-13 10:46
uint8_t buf[4];
UARTCharPut(UART2_BASE, *buf++); ????? buf 是数组,不是指针,注意语法;

大概明白了。指针自加是地址的加一,数组名是常量指针类型,初始化之后是不能够被修改。
GPRS_send(*p,data);之前的用法是GPRS_send(buf,4);...应该是相当于做了*p=buf;是这样吧?

使用特权

评论回复
12
djz1992|  楼主 | 2016-5-13 15:51 | 只看该作者
xyz549040622 发表于 2016-5-13 09:32
TIVA中的例程用的是

你可以看看这个函数的原型,就知道字符串如何发送了。

为什么debug里的run里的clock的子项目都是灰色的?不能够enable
另外也不能看函数的运行时间,不能打勾,说无法enable。这是为什么呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝