1、Altium designer 10在PCB里面复制粘贴,比CAD里面多一个动作,就是点击ctrl+C后,要左键点一下复制基点,比如某根线端点或者焊盘,再粘贴,就是基于刚才点的那个为基点粘贴了。
2、Altium Designer 10 原理图中选中一个元件要怎么跳转到PCB中相应的位置呢?
在原理图上选中该元器件后直接按TS就可以
3、工具-》封装管理器 画完原理图时,用封装管理器 看那些元器件封装是否用错了
4、退出查找相似对象:shift+c
5、如果是测试版,应该在板上标注PCB版设计的日期和版本。
6、PCB 注意过孔大小,打样工厂要求过孔内径不小于3mm,还有routing width 线宽,制作工艺基本最小线宽在4-6mil,不要比这个还小。
Demo板出现错误总结:
1、AMS1117-3.3封装用错了,PCB和实际引脚没对应,用的7809的封装,原因: 直接复制他处5-3.3V电源原理图,导致封装也用错了
2、5V电源未连接,12-5V,生成的5V没有和5-3.3的5V相连; 下载线SWD的3.3V没有和主电路的3.3V相连;画完电路时应放大仔细检查是否有未连线的地方,也应该跟原理图进行对比。
3、33uH电感封装稍微有点大了,可以缩小封装。 用的封装是12*12的 买的是7*7的
4、PCB板6P插座等插座上的引脚没做文字注释。
5、VDD-3.3V stm32供电除了3.3V以外还有VDD 外接的VDD未与芯片VDD连接。
6、提示LED灯:电源指示灯等功率不够,亮度感觉不够,不够亮,调节电阻510Ω估计亮度也不够,要穿透产品外壳。LED 1206封装,灯珠的话封装又不一样
7、基本所有产品都应该设置RESET按钮,恢复出厂设置,程序重启。 没有画RESET按钮。按钮尺寸可小则小
8、尺寸问题:不同电解电容的尺寸,产品需要电解电容横卧的话,画PCB的时候要考虑其横躺的尺寸。
9、PCB板不要留大片空白,尽量保证空间紧凑;
10、注意ESP32 和A9尺寸,预留空间大小。
11、ESP32和A9固件升级接口。
12、焊板子出现最常见的情况就是芯片引脚没焊好。
13、贴片稳压二极管、稳压三极管 要先考虑满足功率要求(足够裕量)的情况下,再考虑尺寸小型化。
14、有源蜂鸣器应该用5V好于3.3V,声音较好。蜂鸣器用的三极管封装用的是S8050,S8050 1和2管脚的封装和S9013的1和2管脚是相反的!!!!!!!!!没有统一用s9013的封
15、触摸板应该增加LED,夜间能看得到触摸按键位置。或者将LED画在MCU板子上。
16、RTC还是需要32.768K外部晶振
17、参考之前ESP8266的做法,wifi+蓝牙模块在画板子的时候可以单独画一部分,可以剪开单独使用。
18、DC-DC DCout 端功率不够用时,可以多路DC-DC, 基本上一路是够用的,优化低功耗管理程序。3.3V和5V供电的负载数量分布合理。
19 MCU板子上IIC接口4P不够,少了IIC_EN和重要的INT外部中断
20、晶振不起振的原因,晶振匹配电容值错了!!!!!!!!22pf 20pf
21 TSM12 RST 外接更好;
22、IC/ID刷卡接口 应预留5V供电接口,以便兼容5V刷卡模块。
23、多留几个IO扩展,多留几个GND,用于功能扩展。
第二版:
1、电源芯片GND未共地 R13 JRST处未共地。R15 BOOT1电阻处未共地。
2、GSM模块留的引脚5V 和GND位置应该互换
3、 ESP32模块的RXD应与STM32的U1_TXD相连,TXD应与STM32的U1_RXD相连
引脚说明:
iic_clk 52 PC11,sda 53 PC12, int 54 PD2, trst 55 PB3, green led 57 PB6, RLY_CTR 11 PC3,BEEP 15 PA1
第二版电路程序资源占用情况:
GPIO: iic_clk 52 PC11,sda 53 PC12, int 54 PD2, trst 55 PB3, green led 57 PB6, RLY_CTR 11 PC3,BEEP 15 PA1
嵌套中断优先级待梳理
串口:USART1 -ESP32 U2 -A9 U3-ICID CARD
定时器Timer:Timer 2--心跳包; T6:继电器弹回时间; T3-U3接收限时 T4-U2接收限时 T5-U1接收限时 T7--临时密码清除
u8 u16 的typedef定义在stm32f10x.h 480行前后 ,跟进一步的在stdint.h
demo板测试:
1、首先测试电源部分是否正常 DC-DC电源精度
2、MCU供电正常后,烧写程序是否可成功
3、MCU IO输出输入是否正常(焊接mcu芯片经常出现IO引脚没焊成功)
4、时钟是否正常,定时器定时是否准确(这点十分重要)
5、GPIO驱动的时候要考虑GPIO的驱动电流能不能达到要求,不能的话则换做开关三极管驱动。
6、驱动继电器的三极管坏了 换了一个才好了,蜂鸣器不响
7、串口:usart1发送没问题,接收数据的时候程序进入HardFault_Handler,仿真时是有接收到数据的;usart2和串口3 rxd txd都正常;问题好像是系统时钟不是72Mhz,U1接收程序里开启定时器导致的。
8、多个仿真器多块板子一起测试,测试不同的程序,加快测试进度。
把上面这个if语句注释了 才不会进入HardFault_Handler;
软件问题:
1 、之前上传卡号不满十位才成功 天杀的switch () case: 例子里break;忘了加!!!!!!!!!!!!!!!!
2、IC卡刷卡进串口中断,有时候收到数据全是0,有时候只收到卡号的首字节 卡还没刷大概率接触不良
刷卡卡离开之后多次误进入串口接收中断: 原因: 天杀的接触不良!!!
3、
(1)心跳包: mac地址待修改;
(2)卡号同步:
(3)上传卡号: 误触发原因及处理方法;
(4)高速信号不要尽量不要杜邦线吧。。
(5)多次重复进入串口接收里用的定时器中断
(6)TCP 频繁主动断开重连 reconnect 连接之前先检查连接状态(是否真实有效)? 如果已连接是否不断开也不重连
基本有效,也存在失真情况;
(7)刷卡用的串口3和A9占用的串口2 是有联系的,刷卡事件产生后,进入usart3中断,然后会向服务器发送刷卡数据,这个时候需要AT指令,所以会发生串口2中断
(8)目前存在原因 刷卡后调用AT+CIPSEND指令,A9占用的串口2有发生串口中断(进入一次),但受到数据是空的,且USART2_RX_STA=0
(9)服务器给设备发信息后,串口2收到数据,之后串口3刷卡都出了问题,刷卡只收到卡号的第一个字节;刷卡串口RXD响应还很慢;已解决
(10)目前问题: 服务器发送回数据后,之后的串口2rxd用不了了,A9指令返回的数据RXD收不到,USART2_RX_STA一直为0
a9gprs_reconnect()
刷卡后:
发送卡号数据执行下列语句:
sprintf(cmd,"AT+CIPSEND=%d",length);
a9_send_cmd(cmd," ",200);//返回的不是OK 是" >" 4个十六进制 0D 0A 3E 20
USART2_SEND(sendbuf,length);
串口2没有收到任何数据,在USART2_SEND(sendbuf,length)之后才收到一个字节的数据,数据为0X0D
(11)错误时序: 刷卡-》刷卡串口收到数据-》上发刷卡记录-》刷卡串口清除中断标志位-》A9串口2产生中断,收到一个字节数据,0x0D
串口2中断优先级:
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
刷卡定时器3中断优先:
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级3
上述错误时序解决办法:设置串口的抢占优先级高于定时器3的抢占优先级;为避免串口接收数据出错,尽量让串口中断优先级高于定时器优先级。
刷卡正常时序: 刷卡串口3中断-》串口3中断执行完毕-》串口3内定时器3中断-》TIMER3 中断执行,发送卡号 -》串口2中断-》串口2中断执行完毕-》TIMER4中断 并执行-》定时器3中断执行完毕;
上述时序要正常执行,要确保串口2抢占优先级>=TIMER4抢占优先级>串口3>TIMER3 同时注意心跳包的抢占优先级不要高于响应刷卡的串口的抢占优先级,要确保刷卡开门快速正常响应。
COMMAND NO RESPONSE! 错误判断网络连接状态 实际上并没有连接 收到CONNECT AT+CIPSEND=100 100个字节没有上发成功,过了好几秒收到 COMMAND NO RESPONSE! 服务器端显示无连接。
5、USART2_RX_STA异常置高位,导致USART2接收数据失败:
a9_send_cmd(cmd," ",200);//发送指令
USART2_RX_STA=0;//清楚标志
//可能情况:指令发送完毕,USART2中断->USART2_RX_STA标志置零->USART2中断内开的TIMER4中断->USART2_RX_STA 被置位
解决方法:
a9_send_cmd(cmd," ",200);//发送指令
delay_ms(20);//延时时间大于TIMER4设置的时间
USART2_RX_STA=0;//清楚标志
如果cmd是AT+CIPSEND 注意send 完数据后A9会返回/r/nOK/r/n
该函数里的AT指令发送函数全部没有收到应答,这函数之后才收到一次串口中断,但USART2_RX_STA=0;之后又串口2RXD又恢复正常,正常接收数据。
坑爹的A9 CIPSEND 和ESP32s是很不一样的,
"AT+CIPSEND=10" 指令发送成功后返回的内容不是"OK",是" >" 4个十六进制数:0D 0A 3E 20
软件问题总结:
1、中断嵌套时序问题,抢占优先级;
2、USART2_RX_STA第15位异常置高位,导致USART2_RXD失效
3、AT+CIPSEND 问题
7、
出现过不准的情况
串口明明在发数据,这里显示Clock Disabled
目前8Mhz的程序用我的板子启动失败,用买的板子启动成功,HSE启动失败,则SYSCLK被强制设置为8Mhz,delay_ms()匹配为8M的情况。目前有种可能:STM32芯片有问题,之前出现过芯片部分功能异常的情况。
目前问题:USART2_RX_STA在心跳包发送完毕之后没有置零。U2_RX内容是\r\n> U2_TX 内容为AT+CIPSEND=91
原因分析:
心跳包程序:
//发送心跳包内容
res=(u8*)http_heartbeat(DOOR_Control_OPEN);
NO_CONCERN_ACK=0;
sprintf(cmd,"AT+CIPSEND=%d",strlen((const char*)res));
a9_send_cmd(cmd,">",200);
USART2_RX_STA=0;//应在此处添加 USART2_RX_STA=0; 清除标志 出错的程序在没有这个清零标志
NO_CONCERN_ACK=1;
USART2_SEND(res,strlen((const char*)res));
myfree(res);
myfree(cmd);
TIM_SetCounter(TIM2,0);
TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除TIMx更新中断标志
重点:每一个独立逻辑操作里的最后一条AT指令执行完毕之后,都要添加USART2_RX_STA=0; 清除标志,确保后面USART2_RXD接收函数可以有效执行。(比如一下部分:心跳包、发送卡号、重连)
本地无该卡号:
GET http://app.tdvpn.com/cards?mac=003e05000456&card=0568385307/ HTTP/1.1
Host:localhost
本地有卡号:
GET http://app.tdvpn.com/acrecord?mac=003e05000453&type=1&num=0568385307/ HTTP/1.1
Host:localhost
测试服务器返回数据:
{"key":"1584","action":"1"}
注意 是双引号 不是单引号,cjson要求是双引号。 p=0;//指向空地址
TSM12MC 触摸板 17脚out1 触摸CS1后电平从1.58变为0 无外围接上拉电阻 触摸强度弱点 也有从1.58->1.03 20脚INT接上拉10K电阻时,触摸CS1电平从3.28->2.94 或2.64 2.94多点
TTL电平变化
out1和INT都是open drain output
软件逻辑:
stm32 usart2串口rx收到http发给A9的数据,然后去处理解析数据,cJSON_Parse(),然后要重连,这个串口2中断处理函数认为还没处理完毕,因为cJSON_Parse()在中断处理函数中,这个时候想要再进中断怎么办,解除挂起的串口中断? 那再进中断,会有哪些问题,是否会影响原有的中断处理函数里的操作。(CM3参考手册有讲,中断)
GET http://app.tdvpn.com:8080/httpdoor/heartbeat?mac=898607B8101
7/ HTTP/1.1
Host:localhost