stm32(HAL库)控制TDC-GP22激光测距

这篇具有很好参考价值的文章主要介绍了stm32(HAL库)控制TDC-GP22激光测距。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

通信协议

tdc-gp22,HAL库,stm32,stm32,单片机,嵌入式硬件
SPI通信速率:在3.3V供电电压下,最大为20Mhz
SPI通信格式:时钟相位=1,时钟极性==0;
cubeMX的配置如下图所示:tdc-gp22,HAL库,stm32,stm32,单片机,嵌入式硬件

数据的写入与读取

对于EEPROM的写入与数据的写入与读取一般遵循:控制指令码+寄存器地址+数据
tdc-gp22,HAL库,stm32,stm32,单片机,嵌入式硬件

TDC-GP22与stm32之间的连接

CJ-MCU公司为tdc-gp22做了封装,在某宝中可以买到这个板子。
根据官方所提供的原理图,模式一脉冲激光测距的引脚对应图如下表所示:文章来源地址https://www.toymoban.com/news/detail-575542.html

stm32 tdc-gp22
3.3V vcc
GND GND
3.3V dis
gpiox intn
gpiox ssn
sck sck
mosi si
miso so
gpiox rtn
gpiox sta
gpiox sp1

stm32HAL库程序编写

void gp22_wr_config_reg(uint8_t opcode_address, uint32_t config_reg_data)   //配置寄存器
{
	uint8_t temp[5];
	temp[0] = opcode_address;
	temp[1] = (uint8_t) ((config_reg_data)>>24);
  temp[2] = (uint8_t) ((config_reg_data)>>16);
	temp[3] = (uint8_t) ((config_reg_data)>>8);
	temp[4] = (uint8_t) (config_reg_data);
	
	HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi2,temp,5,0xffff);
	HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_SET);
	HAL_Delay(1);
} 

void gp22_send_1byte (uint8_t opcode)    //发送一个字节操作码
{
	uint8_t temp = opcode;
	HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi2,&temp,1,0xffff);
	HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_SET);
	HAL_Delay(1);
}

void gp22_read_n_bytes(uint8_t opcode_address,uint8_t n_bytes,uint8_t* result)  //读取n个字节的数据到result数组中并打印
{
	uint8_t temp[5];
	temp[0] = opcode_address;
	switch(n_bytes)
	{
		case 1:
			HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_RESET);
			HAL_SPI_TransmitReceive(&hspi2, temp, result, 1, 0xffff);
		  HAL_UART_Transmit(&huart1,result,1,0xffff);
		  HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_SET);
			HAL_Delay(1);
		case 2:
			temp[1] = 0x00;
		  HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_RESET);
			HAL_SPI_TransmitReceive(&hspi2, temp, result, 2, 0xffff);
		  HAL_UART_Transmit(&huart1,result,2,0xffff);
		  HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_SET);
			HAL_Delay(1);
		case 3:
			temp[1] = 0x00;
		  HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_RESET);
			HAL_SPI_TransmitReceive(&hspi2, temp, result, 3, 0xffff);
		  HAL_UART_Transmit(&huart1,result,3,0xffff);
		  HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_SET);
			HAL_Delay(1);
		case 4:
			temp[1] = 0x00;
		  HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_RESET);
			HAL_SPI_TransmitReceive(&hspi2, temp, result, 4, 0xffff);
		  HAL_UART_Transmit(&huart1,result,4,0xffff);
		  HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_SET);
			HAL_Delay(1);
		
		case 5:
			temp[1] = 0x00;
		  HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_RESET);
			HAL_SPI_TransmitReceive(&hspi2, temp, result, 5, 0xffff);
		  HAL_UART_Transmit(&huart1,result,5,0xffff);
		  HAL_GPIO_WritePin(GPIOC,nss_tdc_Pin,GPIO_PIN_SET);
			HAL_Delay(1);
	}
}

void gp22_config(void)
{
	//硬件复位
	HAL_GPIO_WritePin(GPIOC, tdc_reset_Pin, GPIO_PIN_SET);
  HAL_Delay(10);
  HAL_GPIO_WritePin(GPIOC, tdc_reset_Pin, GPIO_PIN_RESET);
  HAL_Delay(10);
  HAL_GPIO_WritePin(GPIOC, tdc_reset_Pin, GPIO_PIN_SET);
	//上电软件复位
	gp22_send_1byte (0x50);
	HAL_Delay(1);
	
	gp22_wr_config_reg(0x80,0x00242000);
	gp22_wr_config_reg(0x81,0x01410000);
	gp22_wr_config_reg(0x82,0xe0000000);
	gp22_wr_config_reg(0x83,0x00000000);
	gp22_wr_config_reg(0x84,0x20000000);
	gp22_wr_config_reg(0x85,0x08000000);
}
int main()
{
 	gp22_config();
 	while(1)
 	{
 		gp22_send_1byte (0x70);   //初始化测量
 		//这里是开始信号与停止信号触发
 		while(HAL_GPIO_ReadPin(GPIOA, tdc_intn_Pin) == 1);   //INTN引脚复位表示计算完成
 		gp22_read_n_bytes(0xb0,5,result);//这里的参数5代表发送一个字节的数据读取4个字节的数据(理解这句代码很重要) 		
 	}
}

到了这里,关于stm32(HAL库)控制TDC-GP22激光测距的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32_HAL库实现超声波测距

    核心板               : STM32F103C8T6。 超声波测距模块 : HC-SR04超声波测距模块 实验目的            : 利用超声波测距,将测量的距离打印在串口并输出。 HC-SR04超声波测距模块介绍         接口定义:Vcc、 Trig(控制端——PA2)、 Echo(接收端——PA11)、 Gnd        

    2024年02月16日
    浏览(53)
  • STM32 HAL 驱动PM2.5传感器(GP2Y10AU气体检测模块)

    目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 ADC外设配置 2.3 串口外设配置  2.4 项目生成  3、KEIL端程序整合 3.1 串口重映射 3.2 ADC数据采集 3.3 主函数代 3.4 效果展示 本文通过STM32F103C8T6单片机通过HAL库方式对GP2Y10AU气体检测模块进行数据的读取,

    2024年02月22日
    浏览(44)
  • 手把手教你,通过HAL库实现STM32的超声波测距--以SR-04为例

    目录 0、SR-04基本原理 1、准备工作 2、连线  3、STM32CUBEMX设置 3.1新建工程 3.2芯片通用设置 3.3定时器捕获设置 ​3.4其他设置 3.5生成工程  4、程序完善 4.1完善打印输出函数  4.2完善tim.c 4.3完善gpio.c  4.4完善main函数   5、总结 声波遇到障碍物会反射,而声波的速度已知,所以

    2024年02月14日
    浏览(50)
  • 基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

            前言: 本文主要是为了 日常普通场合 下测距做的 对比实验 ,本实验主要包含 2种模块 : 超声波测距模块 (HC-SR04)和 红外测距模块 (SHARP GP2Y0A21YK0F)。两种模块不管是测距原理和编程实验方式都是不相同的,其测距效果也存在很大差异。感兴趣的读者朋友,

    2023年04月27日
    浏览(69)
  • STM32系列(HAL库)——F103C8T6通过HC-SR04超声波模块实现测距

    (1)编程平台:Keil5 (2)CubeMX (3)XCOM(串口调试助手) (1)某宝买的超声波模块   (2)F1的板子,本例使用经典F103C8T6 (3)ST-link 下载器 (4)USB-TTL模块 (5)杜邦线若干 (1)模块简介:         超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射

    2024年02月02日
    浏览(50)
  • stm32cubemx hal学习记录:电机控制

    1、配置RCC、SYS,SYS的Timebase Source选择TIM6 2、配置USART1、时钟84MHz 3、激活FreeRTOS,选择CMSIS_V1,Config parameters种USE_TIMERS选择ENABLE 1、选用TIM3的编码器模式  2、驱动使用L298N,将PB6、PB7设置为输出模式  3、使用TIM2的CH1输出1kHz的PWM 1、设置两个软件定时器,一个用于总控制,一个

    2024年02月17日
    浏览(42)
  • STM32控制矩阵按键,HAL库,cubeMX配置

    我使用的是STM32F103RCT6这款单片机,HAL库,使用cubeMX配置。 使用矩阵按键实现功能的方法为轮询法 1.首先矩阵键盘原理图如下: 2.实物图 按照矩阵键盘接法,16个按键需要8个io口,我选择了PC口的0~7号引脚,前四个依次接矩阵键盘的行,后四个依次接矩阵键盘的列;矩阵键盘的

    2023年04月17日
    浏览(63)
  • 基于STM32F103C8T6(HAL库)的HC-SR501红外人体传感及HC-SR04超声波测距

    一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁 二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发 三、实战小例程 基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方 四、基于STM32F103C8T6最小系统板HAL库CubeMX驱动HC-SR501红外人体传感模块 五、基于STM32F103C8

    2023年04月17日
    浏览(110)
  • STM32---SG90舵机控制(HAL库,含源码)

    写在前面: 在嵌入式的项目中,舵机是一个十分常见的元器件模块,其主要的功能是实现机械转动,实质上舵机是一个伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。例如在机器人的电控制器系统中,飞行器设计,遥控机器人等。舵机的使用需要PWM信号

    2024年04月13日
    浏览(35)
  • STM32通过HAL库实现DMX512控制灯

    关于DMX512协议的解释下面这篇文章写的十分详尽: 链接:作者:夏沫の浅雨 通过串口模拟 通过上文我们可以得知,数据帧需要 1位低电平+8位数据位+2位高电平 ,这种格式与串口通信协议的格式可以说是几乎一模一样,因为平日基本上都是使用串口8N1格式。因此,若是不考虑

    2024年04月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包