1杜邦线
1.1.杜邦线的类型及作用
杜邦线(Dupont Wire)是电子电路中常用的连接线,根据两端的接头性别可分为公对公、母对母、公对母三种类型,其核心区别在于接头的设计及适用场景。
公头(Male Header)
金属引脚外露,可直接插入面包板、PCB板或母头插座。通常用于信号输出端或需要插入的接口。
母头(Female Header)
内部为金属套筒,用于包裹公头引脚。常用于连接传感器、模块或保护引脚避免短路。
1.2常见组合及用途
公对公(Male-to-Male)
两端均为公头,适用于:
- 面包板之间的跳线连接
- 连接两个需要插入式接口的设备
- 扩展PCB板上的引脚
母对母(Female-to-Female)
两端均为母头,适用于:
- 连接两个带公头引脚的模块(如Arduino与传感器)
- 避免直接接触裸露引脚,提高安全性
公对母(Male-to-Female)
一端公头一端母头,适用于:
- 连接开发板(如树莓派)与带母头的模块
- 延长或转接不同性别的接口
- 灵活适配混合型设备
1.3选择建议
- 根据设备接口性别匹配对应杜邦线。
- 公对母线适合模块化调试 ,母对母线适合固定连接。
- 线序需注意:彩色线通常为信号线,黑色/红色对应GND/VCC。
2.对射式红外传感器计次
CountSensor.c
#include "stm32f10x.h" // Device header
uint16_t CountSensor_Count; //全局变量,用于计数
void CountSensor_Init(void)
{
/*开启时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOB的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启AFIO的时钟,外部中断必须开启AFIO的时钟
/*GPIO初始化将PB14引脚初始化为上拉输入*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/*AFIO选择中断引脚*/
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);//将外部中断的14号线映射到GPIOB,即选择PB14为外部中断引脚
/*EXTI初始化*/
EXTI_InitTypeDef EXTI_InitStructure; //定义结构体变量
EXTI_InitStructure.EXTI_Line = EXTI_Line14; //选择配置外部中断的14号线
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //指定外部中断线使能
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //指定外部中断线为中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //指定外部中断线为下降沿触发
EXTI_Init(&EXTI_InitStructure); //将结构体变量交给EXTI_Init,配置EXTI外设
/*NVIC中断分组*/
//配置NVIC为分组2
//即抢占优先级范围:0~3,响应优先级范围:0~3
//此分组配置在整个工程中仅需调用一次
//若有多个中断,可以把此代码放在main函数内,while循环之前
//若调用多次配置分组的代码,则后执行的配置会覆盖先执行的配置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/*NVIC配置*/
NVIC_InitTypeDef NVIC_InitStructure; //定义结构体变量
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //选择配置NVIC的EXTI15_10线
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //指定NVIC线路使能
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //指定NVIC线路的抢占优先级为1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //指定NVIC线路的响应优先级为1
NVIC_Init(&NVIC_InitStructure); //将结构体变量交给NVIC_Init,配置NVIC外设
}
uint16_t CountSensor_Get(void)
{
return CountSensor_Count;
}
void EXTI15_10_IRQHandler(void)
{
//判断是否是外部中断14号线触发的中断
if (EXTI_GetITStatus(EXTI_Line14) == SET)
{
/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)
{
CountSensor_Count ++; //计数值自增一次
}
EXTI_ClearITPendingBit(EXTI_Line14); //清除外部中断14号线的中断标志位
//中断标志位必须清除
//否则中断将连续不断地触发,导致主程序卡死
}
}
CountSensor,h
#ifndef __COUNT_SENSOR_H
#define __COUNT_SENSOR_H
void CountSensor_Init(void);
uint16_t CountSensor_Get(void);
#endif
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h" //使用延时函数
#include "OLED.h"
#include "CountSensor.h"
int main(void)
{
//初始化OLED显示屏
OLED_Init();
CountSensor_Init();
//在OLED第1行第1列显示静态文本"Count:"
OLED_ShowString(1,1,"Count:");
while(1)
{
//实时显示传感器的数值,计次
OLED_ShowNum(1,7,CountSensor_Get(),5);
}
}