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

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

飞飞飞~

于 2022-12-19 14:19:58 发布

1929
 收藏 24
分类专栏: HAL库 stm32 文章标签: stm32 单片机 嵌入式硬件
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/y_o_u_ng/article/details/128371480
收起

HAL库
同时被 2 个专栏收录
2 篇文章0 订阅
订阅专栏

stm32
2 篇文章0 订阅
订阅专栏
通信协议

SPI通信速率:在3.3V供电电压下,最大为20Mhz
SPI通信格式:时钟相位=1,时钟极性==0;
cubeMX的配置如下图所示:

数据的写入与读取
对于EEPROM的写入与数据的写入与读取一般遵循:控制指令码+寄存器地址+数据


TDC-GP22与stm32之间的连接
CJ-MCU公司为tdc-gp22做了封装,在某宝中可以买到这个板子。
根据官方所提供的原理图,模式一脉冲激光测距的引脚对应图如下表所示:

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个字节的数据(理解这句代码很重要) 		
 	}
}

————————————————
版权声明:本文为CSDN博主「飞飞飞~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/y_o_u_ng/article/details/128371480

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值