STM32单片机学习篇9

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);
	}
}
相关推荐
视觉小萌新15 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
Zw-awa18 小时前
从 CPU 搬运到自动搬运:DMA、空闲中断和两块缓冲
stm32
yyyang8818 小时前
蓝牙系统整体架构详解
学习·信息与通信
无敌贵点大王18 小时前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件
庙堂龙吟奈我何18 小时前
二进制和十六进制
stm32·单片机
Linux-lucky18 小时前
46-Linux学习之旅之LVS负载均衡与keepalived高可用
linux·运维·学习·ubuntu·负载均衡·lvs
国科安芯20 小时前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
TST-魚爷20 小时前
小型视频会议室音频踩坑:一体化拾音扩音方案实测分享(易视讯)
stm32·电脑·音视频·钉钉·腾讯会议·zoom会议
金色光环20 小时前
【DSP学习】C2000_ADC中断_笔记
笔记·学习
Дерек的学习记录20 小时前
Unreal Engine 5:第三人称运动系统和人物动画
开发语言·学习·ue5