|
【MXCHIP Open1081】TCP+AD+18B20和一些问题
[复制链接]
本帖最后由 ljj3166 于 2014-11-30 14:57 编辑
上次使用了UDP发送数据到PC
这回试验了一下TCP,顺道驱动了一下18B20和一个AD通道
AD通道挂在Arduino接口的A0端
A0对应SOC芯片的54管脚,PA1管脚
这里One-Wire硬件上有个很奇怪的地方,没有上拉电阻
没记错的话,18B20数据手册要求是需要上拉的
难道是芯片GPIO配置了上拉?
看了一下驱动代码,好像真是这样
void Onewire_OUT_PULL_UP(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = DS18B20_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(DS18B20_Port, &GPIO_InitStructure);
}
void Onewire_OUT_FLOATING(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = DS18B20_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(DS18B20_Port, &GPIO_InitStructure);
}
void Onewire_IN_FLOATING(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = DS18B20_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(DS18B20_Port, &GPIO_InitStructure);
}
void Onewire_IN_PULL_UP(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = DS18B20_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(DS18B20_Port, &GPIO_InitStructure);
}
18B20的数据线都进行了内部上拉
不过听说,内部都是弱上拉呢,算不算个隐患呢?
也许这块片子例外吧
看看工程结构吧,直接把文件包含进来了
基本上就是这么些东西,下面进入问题时间
先帖代码,做了些基本的注释
回复可见,哇咔咔
TCP的代码和UDP稍有区别
问题出现了
send函数,如果先发送字符串,再以变量的形式传递进去发送,然后再发送字符串。最后再以变量的形式传递进去发送
就会出现问题
譬如
send(clientfd, "Temperture&AD Value:", sizeof("Temperture&AD Value:"), 0);
send(clientfd, TMP_buff, TMP_str_len, 0);
send(clientfd, "&", sizeof("&"), 0);
send(clientfd, AD_buff, AD_str_len, 0);
send(clientfd, "\r\n", sizeof("\r\n"), 0);
这种排序方式,使得最后2句send(clientfd, AD_buff, AD_str_len, 0);和send(clientfd, "\r\n", sizeof("\r\n"), 0);无法发送。
看上去似乎是进行一次变量传递发送后,只能使用固定字符串形式发送了,再发送变量就没有效果了
很奇怪的一个问题
最后实在没办法,把温度变量、AD变量和固定字符串,用strcat函数全部链接到一个缓存里头,才能正常发送
不知道坛子里面有没有MXCHIP的大牛,求科普。
最后上个视频吧,呵呵
P.S. 代码复制进来,
都变成clientfd+斜体了,需要的同志自行补上吧算不算论坛的bug?@soso
|
|