做一个板子,才开始没想有没有DAC用了习惯的stm32f103C8T6,板子做回来,很简单的程序测试,就是没有DAC输出,后来发现这个48脚的没有DAC。。

于是,就改用64脚的,自己买的正点原子的mini板子也是RBT6,然后今天板子回来,焊接了两片都不行,当场惊呆了。。。隐约怀疑是不是也没有DAC,但是正点原子的教程有DAC啊

去官方网站查看了,64脚的只有RCT6才有DAC,RBT6是没有的,为什么教程有DAC呢?后来发现,原子最近一两年卖的mini板已经换成了RCT6,而我看的是新教程,我看以前光盘里面的资料的教程,果然没有DAC这个例程。。。。。

fuck了狗了,看来不能凭直觉,以后做项目之前要确定资料。。。还好RCT6也是64脚的,只需要买芯片回来换上就行了。。。之前的48脚的板子就废了。。。教训啊,搞硬件真的很影响心情,随时就觉得不科学。。。

1、用PHP5及以上的函数 stream_socket_client或者其如果是服务器的用server,此方法有参数,但是网上资料很少提及用法,干脆就啥也不加了,超时设置了好像没有作用。此方法是否是阻塞的(比如多个人用浏览器同时用这个会如何,是否会等一个执行完了,然后排队处理?有可能是,因为PHP是单线程的运行方式?那网站也是用的PHP,也可以提供N多人访问呢)

2、用gw的http转异步TCP的方法,感觉速度还可以,至于跟1中的方法如何对比还不确定。

iOS 证书

1CSR 是请求文件MAC电脑里面钥匙串助理,请求生成的

2、通过网站Certificate里面申请开发证书或者发布证书cer,需要用到CSR文件。

2中的文件可以安装本机器之后,导出p12文件,用来给其他电脑使用,导出证书都会有一个密码要设置)

3、在网站identifiers里面的App IDs里面设置这个是跟APP工程包名一致的,每个APP需要增加一个。

4、真机调试之前需要在网站Devices里面增加你的手机设备的UUID.

5、申请描述文件,描述文件在网站的Provision Prefiles里面增加,分真机调试(需要勾选4中的设备)和发布APP Store两种文件,后缀mobileprobison

开发者网站后台地址:https://developer.apple.com

stm32发送第一个字节会丢失,才开始以为是电脑软件的问题,后来发现,无论如何第一个字节都丢失。一般都是copy来的函数,主要是因为发送函数

//串口1发送一个字节
void Uart_Send_Byte(u8 dat)
{
    USART_SendData(USART1,dat);
    while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束// 等特数据传送(TI发送中断标志)
}
stm32开机默认TC标志是1,需要读取一下才清0,而发送第一个的时候,while还没有运行,所以第一个字节没有实际发出去。只要发送前加上一句话就可以了。
void Uart_Send_Byte(u8 dat)
{
    USART_GetFlagStatus(USART1, USART_FLAG_TC);//读取清除标志
    USART_SendData(USART1,dat);
    while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束// 等特数据传送(TI发送中断标志)
}

ENC28J60比较复杂,W5500用了很久,这次做了一个转发服务模块,总是遇到各种现象。


1、W5500无论是TCP客户端还是服务端,通过自动或者手动KEEPALIVE来知道对方已经不在线,W5500的机制是双方必须都发送成功过数据,才会人为链路OK,才会发送心跳,否则抓包你是看不到的。这个其他地方都不一定说了。代码如下很简单,写寄存器,单位是5S,实测10S估计才掉线处理

//keepalive 心跳 手动
void Send_KA(SOCKET s)
{
Write_W5500_SOCK_1Byte(s,Sn_KPALVTR,0);
Write_W5500_SOCK_1Byte(s,Sn_CR,SEND_KEEP);
}

//自动keeplive 1-7
void AUTO_KA(void)
{
U8 i=0;
for(i=1;i<8;i++)
{
Write_W5500_SOCK_1Byte(i,Sn_KPALVTR,1);//1*5S
}
}

2、接收网络数据函数,这个是普遍例程里面的
size=Read_SOCK_Data_Buffer(0, Rx_Buffer);
这个size可能是0,如果发送串口出去,恭喜,单片机就2了,使劲发送各种乱起八糟的东西,看门狗就重启了,然后就RST。

测试了很久,这个芯片还是不错的,前提是连上网之后,但是有时候初始化阶段就进不去下一步,就是在等待网线插入那个函数是死循环
while((Read_W5500_1Byte(PHYCFGR)&LINK)==0)//等待以太网连接完成
{
if(debugflag==1)
{
LED=0;
Uart_Send_Byte(‘S’);
Uart_Send_Byte(‘Y’);
Uart_Send_Byte(‘:’);
Uart_Send_Byte(‘W’);
Uart_Send_Byte(‘A’);
Uart_Send_Byte(‘I’);
Uart_Send_Byte(‘T’);
Uart_Send_Byte(0x0d);
Uart_Send_Byte(0x0a);
delay_ms(100);
LED=1;
delay_ms(100);

}
}
加了一个指示的,方便确定是这里

个人博客:www.longjiancn.com
未来之家物联网实验室:www.fuhome.net

这几天做微信开发,主要是demo里面介绍的文字很少,不过好在摸索知道了之后就知道怎么处理了。其中有的是搜索别人的博客或者问答分享才知道很多潜在问题。
SDK目录结构
|– cert 证书目录,申请商户成功后可以下载到的
| |– apiclient_cert.pem
| — apiclient_key.pem
|– download.php
|– index.php **几种支付方式的首页引导的,好几个按钮**
|– lib
| |– WxPay.Api.php
| |– WxPay.Config.php **主要把商户信息,公众号信息填进去**
| |– WxPay.Data.php
| |– WxPay.Exception.php
|– WxPay.Notify.php
|– logs
| |– 2015-03-06.log
| |– 2015-03-11.log

 

pay
|– micropay.php
|– native.php **主要扫码支付的模式一,模式二生产二维码的页面(其中模式二的订单也是在这里提交)**
|– native_notify.php **模式一的二维码被扫码后,会通知这个页面生产提交订单到微信**
|– notify.php **jsapi 扫码(native)支付成功的结果都会回调通知这个页面**
|– orderquery.php
|– qrcode.php
|– refund.php
|– refundquery.php
|– unifiedorder.php
|– WxPay.JsApiPay.php
|– WxPay.MicroPay.php
|– WxPay.NativePay.php
|– log.php
|– phpqrcode
有里这个介绍就进度快一点了,用的是http模式,据说https模式demo中有的地方需要修改bug。

再说一下,支付成功之后通知的页面,的url都要写在公众号里配置,而且二级域名,目录都要精准一样,否则就会人为没有配置。

notify.php的这个位置可以写支付成功之后,你要做的事情。注意不要话费太多时间,而且微信可能不止一次通知,也许会重复。不过你可以SQL到数据库,哪怕重复提交,插入不进去数据,也相当于避免重复提交咯。哈哈

有的默认值,SIM800C 900A是不一样的,以最新的800C来说,普通用户直接,本文是用来做单连接的应用GRPS走流量

1、AT测试串口同不通,否则改波特率,如果是默认的自动适应波特率,多发几包就可以了

2、AT+CREG?//查询注册上基站没有回答收到的是+CREG=X,Y

AT+CREG=X   ,X:可以是0 1 2 显示方式不同

Y:1注册到本地 2寻找到了运营商 3没找到  4未知 5漫游  一般都是1

3、AT+CIPSHUT   为了以防万一,每次初始化的时候关闭移动场景 回复 SHUT OK

4、AT+CIPSTART=“TCP”,“www.fuhome.net”,80    注意可以是域名也可以是IP地址回复CONNECT OK 或者ALREADY CONNECT 或者ERROR

5、AT+CIPSTATUS 查询连接上了没有如果连上了就是回复CONNECT OK 等等其他的

6、AT+CIPSEND=123    123是下面你发送包的长度,这样避免了不指定长度的时候需要以0x1A为结束符,如果你包里有这个字符i就被截断了。回复>

7、数据包   回复:SEND OK

 

每次发送都要67连续,其余时间要检测连接状态,一旦掉了,有时候是信号不好,有时候是不挤掉了,就从1开始初始化咯。其他的基本是默认的,可以省略就好了

今天 做STM32和SIM800C程序的时候,用到串口1,2,测试速度的时候,直接死在某一个中断里面了,后来一搜索,STM32的串口有一个特性,导致进中断,

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  这个初始语句,默认同时也打开了 USART_IT_ORE

 

也就是中途进中断不单是收到了数据,RXNE,也可能是溢出了,就是没读走,说白了要把ORE标志去除,不然会一直进中断

需要读SR 再读CR,就清除了

 if (USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)//溢出中断 读SR,没有开ERR中断的时候,GetITStatus是都不到这个的中断标志的
{
       Res=USART_ReceiveData(USART2);//读取接收到的数据  丢掉,同时清楚溢出中断 DR
}
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾) 读CR
{
     Res=USART_ReceiveData(USART2);//读取接收到的数据  DR
}

亲测解决了这个问题