背景 * d' G3 r9 [4 o: R
2 j7 }/ e) z5 C. G1 H" Y
搞了这么个玩意儿,因为Typec的24个引脚焊盘都引出来了,为保证质量,要进行测量,从而保证其该通的通,该断的断。时间紧,没办法,看手上有F4的开发板,索性就用它来DIY了 . c8 l1 h( l1 q8 C1 Y8 [5 n
需求
" p2 D) f4 T& U& z5 U; `
0 Q# f. m' s; t- s
如图所示,因24个引脚中,只用了 VCC, GND, DP, DN, CC1, CC2 7个信号,外加一个外壳,所以通路只需确认这7路即可。短路就简单了,不该短的别短的就OK了。 / e H2 u( W8 I9 ]- H
原理
% R& c, U# K" Z% j- D4 D ~
首先将公头和母座的24个脚加外壳,一共25个引脚分别引出来接到IO口上。 + ]7 b, F8 _: u7 V+ L9 j' r+ K
短路测试:将1个pin设为输出高电平,其余pin设为输入并依次读取,如果为高即为短路。因AB面短路的可能性极低,也懒的搞,所以A面只测A面,B面只测B面 9 O3 a, z* `0 _2 z Z
通路测试:根据电路图,只测所有相连引脚,同样将1个pin设为输出高电平,其余设为输入并依次读取,如果为高即为通路
3 \* m* T5 C- _
硬件制作
' k3 t: @7 u/ b6 ^( V7 m
某宝上买了24引脚加外壳都引出来的测试板,然后焊线接到开发板的IO口上。直接上图 6 ]; g' w, o; w8 o
& U6 \, l9 N: q- Z
看着很乱是吧,本来线就多,还用错线了,也懒的再重新焊了,就加了下转接。
1 B4 Z- L7 m7 S% |4 e* |1 f/ `
软件编程
/ G0 a5 B- ~( E4 r* w$ q. }
着急用, 怎么简单就怎么来了,代码直接堆,IO口接一个填一个。
- Q6 ^; i* p5 D1 g# Q% V
所用IO定义
& Y! n0 w. f) s( T/ M1 N; q /*************************************母头A面所用IO****************************************/uint16_t gblpFemaleAPin[13] = {GPIO_Pin_14, GPIO_Pin_15, GPIO_Pin_11, GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_2, GPIO_Pin_3, GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_1, GPIO_Pin_8, GPIO_Pin_6 };GPIO_TypeDef * gblpFemaleAPort[13] = {GPIOB, GPIOB, GPIOD, GPIOD, GPIOD, GPIOG,GPIOG, GPIOG, GPIOG, GPIOG, GPIOD, GPIOG, GPIOC};/*************************************母头B面所用IO****************************************/ uint16_t gblpFemaleBPin[12] = {GPIO_Pin_6, GPIO_Pin_5, GPIO_Pin_4, GPIO_Pin_15, GPIO_Pin_14, GPIO_Pin_7, GPIO_Pin_15, GPIO_Pin_5, GPIO_Pin_11, GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14 };GPIO_TypeDef * gblpFemaleBPort[12] = {GPIOD, GPIOD, GPIOD, GPIOD, GPIOD, GPIOD,GPIOG, GPIOB, GPIOG, GPIOG, GPIOG, GPIOG};
7 x" ]% _( ]7 D; T/*************************************公头A面所用IO****************************************/ uint16_t gblpMaleAPin[13] = {GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_8, GPIO_Pin_0, GPIO_Pin_15, GPIO_Pin_10, GPIO_Pin_13, GPIO_Pin_12, GPIO_Pin_11, GPIO_Pin_1, GPIO_Pin_0, GPIO_Pin_0, GPIO_Pin_1 };GPIO_TypeDef * gblpMaleAPort[13] = {GPIOB, GPIOB, GPIOD, GPIOG, GPIOF, GPIOD,GPIOF, GPIOF, GPIOF, GPIOB, GPIOB, GPIOF, GPIOF};/*************************************公头B面所用IO****************************************/ uint16_t gblpMaleBPin[12] = {GPIO_Pin_6, GPIO_Pin_5, GPIO_Pin_4, GPIO_Pin_13, GPIO_Pin_3, GPIO_Pin_2, GPIO_Pin_1, GPIO_Pin_0, GPIO_Pin_5, GPIO_Pin_4, GPIO_Pin_6, GPIO_Pin_2 };GPIO_TypeDef * gblpMaleBPort[12] = {GPIOA, GPIOA, GPIOA, GPIOC, GPIOC, GPIOC,GPIOC, GPIOC, GPIOF, GPIOF, GPIOE, GPIOF};
# _0 M, Q) S' K" b/************************************通路测试所用IO****************************************/ uint16_t gblpFAConnectPin[4] = {GPIO_Pin_6, GPIO_Pin_8, GPIO_Pin_5, GPIO_Pin_4};GPIO_TypeDef * gblpFAConnectPort[4] = {GPIOC, GPIOG, GPIOG, GPIOG};uint16_t gblpFBConnectPin[3] = {GPIO_Pin_5, GPIO_Pin_15, GPIO_Pin_7};GPIO_TypeDef * gblpFBConnectPort[3] = {GPIOB, GPIOG, GPIOD};" [, h" V- v1 S' `7 c- C' p" S
短路测试部分代码
* H4 J+ w6 ~$ t& E8 u- y& y for(i=0; i<12; i++) { GPIO_InitStructure.GPIO_Pin = gblpFemaleAPin; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(gblpFemaleAPort, &GPIO_InitStructure); GPIO_WriteBit(gblpFemaleAPort, gblpFemaleAPin, Bit_SET);for(l=i+1; l<13; l++) {if(GPIO_ReadInputDataBit(gblpFemaleAPort[l], gblpFemaleAPin[l])) {printf("FA%d = FA%d ", 12-i,12-l);if(i==0 && l==11) aFlag |= 0x8000;else if(i==3 && l==8) aFlag |= 0x4000;else aFlag |= 0x2000;
: o! \* ^! t9 Y6 A. a8 j( Z/ R! J; x aFlag++; } Delay_ms(2); } GPIO_InitStructure.GPIO_Pin = gblpFemaleAPin; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(gblpFemaleAPort, &GPIO_InitStructure); GPIO_WriteBit(gblpFemaleAPort, gblpFemaleAPin, Bit_RESET); } if((aFlag&0xE000) == 0xC000) {printf("PASS\r\n"); flag |= 0x01; } else {printf("Failed\r\n"); } z9 n5 t1 n; {) ^9 @
通过测试部分代码 5 S9 r% O* F* Y+ h/ `' |7 Z/ a/ `
GPIO_InitStructure.GPIO_Pin = gblpFAConnectPin[2]; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(gblpFAConnectPort[2], &GPIO_InitStructure); GPIO_WriteBit(gblpFAConnectPort[2], gblpFAConnectPin[2], Bit_SET);if(GPIO_ReadInputDataBit(gblpMaleAPort[3], gblpMaleAPin[3]) && GPIO_ReadInputDataBit(gblpMaleAPort[8], gblpMaleAPin[8]) && GPIO_ReadInputDataBit(gblpMaleBPort[3], gblpMaleBPin[3]) && GPIO_ReadInputDataBit(gblpMaleBPort[8], gblpMaleBPin[8])) {printf("FA4 = MA4 = MA9 = MB4 = MB9 "); aFlag |= 0x0004; } GPIO_InitStructure.GPIO_Pin = gblpFAConnectPin[2]; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(gblpFAConnectPort[2], &GPIO_InitStructure); GPIO_WriteBit(gblpFAConnectPort[2], gblpFAConnectPin[2], Bit_RESET);
- W4 V( E" x- i t4 H
运行结果
+ S; }- N! {* J( r" F& j! J; p
1 ^1 V' r) y6 C9 ]. p9 `' E
5 u9 K; z) d8 j7 W8 ? |