STM32 SPI获取磁性角度传感器AS5048A角度数据

120 篇文章 70 订阅
订阅专栏
本文介绍了如何使用STM32通过SPI接口读取AS5048A磁性角度传感器的角度数据。AS5048A是一款14位精度的传感器,实际稳定精度为12位,适用于旋转编码器和云台角度检测。文章详细阐述了传感器的工作原理、SPI协议和读取角度的操作步骤,并提供了一个STM32F103ZET6芯片的SPI读取角度的C代码示例,该示例通过USART1串口输出角度数据。
摘要由CSDN通过智能技术生成

STM32 SPI获取磁性角度传感器AS5048A角度数据

AS5048A是14位精度的磁性角度检测传感器,采用SPI接口。实际上稳定精度还是只有12位,也就是在检测环境静止情况下,数据输出的最后两位在变化而不恒定。AS5048A可用于旋转角度检测如旋转编码器等,尤其可以用于Z轴的旋转检测如云台角度检测。

如下为官方模块:
在这里插入图片描述
因为AS5048A可以通过SPI也可以通过PWM线输出角度数据,第三方模块有单独输出PWM的类型,也有单独输出SPI的类型。这里只介绍SPI的角度输出方式。
在这里插入图片描述

检测原理

如下所示为磁性角度传感器的角度检测原理,需要半圆磁极的磁片配合,在磁片旋转时,AS5048A检测磁力线的变动获得角度信息。
在这里插入图片描述
AS5048A是360度检测传感器,用户可以设置0角度位置。优点是直接输出角度而不需要做角速度到角度的转换,且经过测试验证长时间运行没有零点漂移现象。

SPI协议

AS5048A采用16位的SPI访问格式,操作地址设定命令发送格式如下:
在这里插入图片描述
写数据格式如下:
在这里插入图片描述
读出的数据格式如下:
在这里插入图片描述
AS5048A内部寄存器功能如下:
在这里插入图片描述

读取角度操作方式

根据时序要求,读取角度的操作方式可为:

  1. 清除错误寄存器指令
  2. 空操作指令
  3. 读角度指令
  4. 空操作指令
    因此会发送4次SPI指令,由于采用发收全双工方式,最后一个空操作指令周期内收到的数据包含角度数据。

角度数据处理

对于角度数据有两种处理方式:

  1. 设置零点位置,然后直接用读出的角度数据
  2. 不设置零点位置,STM32芯片上电时先读取当前位置数据作为“零点”,在后面进行算法处理。

下面例程采用第二种方式的实现。

STM32例程

例程采用STM32F103ZET6芯片开发板,以及采用STM32CUBEIDE开发环境。
首先建立工程并设置时钟,将外部8MHz时钟倍频到系统时钟。
在这里插入图片描述
在这里插入图片描述
采用USART1异步串口输出数据,配置USART1为115200波特率:
在这里插入图片描述
在这里插入图片描述
采用SPI1作为AS5048A的通讯接口,进行配置:
在这里插入图片描述

在这里插入图片描述
SPI片选信号由GPIO逻辑控制,需要单独配置:
在这里插入图片描述
然后实现代码,通过串口将角度数据输出,帧头为0x55 0xaa, 然后是2个字节16位的角度数据。360度范围对应0 ~ (16384-1)的输出。

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
//Written by Pegasus Yu
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
#define __AS5048A2_CS_ENABLE() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET)
#define __AS5048A2_CS_DISABLE() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)

#define __Read_NOP 0xc000
#define __Read_Clear_Error_Flag 0x4001
#define __Read_Angle 0xffff

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
SPI_HandleTypeDef hspi1;

UART_HandleTypeDef huart1;

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);
static void MX_USART1_UART_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint16_t SPI_TX_DATA[10]={0};
uint16_t SPI_RX_DATA[10]={0};

const uint8_t op_num = 4;
uint16_t origin_value = 0;
uint8_t i;

uint8_t TXD[4]={0};
uint16_t post_process_value=0;
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
          TXD[0]=0x55; TXD[1]=0xaa;//frame head

		  SPI_TX_DATA[0] =  __Read_Clear_Error_Flag;
		  SPI_TX_DATA[1] =  __Read_NOP;
		  SPI_TX_DATA[2] =  __Read_Angle;
		  SPI_TX_DATA[3] =  __Read_NOP;

		  for (i = 0; i<op_num; i++)
		    {
			  __AS5048A2_CS_ENABLE();
		      HAL_SPI_TransmitReceive (&hspi1, &SPI_TX_DATA[i], &SPI_RX_DATA[i], 1, 2710);
		      __AS5048A2_CS_DISABLE();
		      HAL_Delay(1);
		    }

		  origin_value = SPI_RX_DATA[3]&0x3fff;

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

    for (i = 0; i<op_num; i++)
     {
	  __AS5048A2_CS_ENABLE();
      HAL_SPI_TransmitReceive (&hspi1, &SPI_TX_DATA[i], &SPI_RX_DATA[i], 1, 2710);
      __AS5048A2_CS_DISABLE();
      HAL_Delay(1);
     }

 	if ( (SPI_RX_DATA[3]&0x3fff)>=origin_value ) post_process_value= (SPI_RX_DATA[3]&0x3fff)-origin_value;
 	else post_process_value= 16384-origin_value+(SPI_RX_DATA[3]&0x3fff);

 	TXD[2] = (post_process_value&0xff00)>>8;
 	TXD[3]= post_process_value&0x00ff;

 	HAL_UART_Transmit(&huart1, TXD, 4, 0xffff); 
 	HAL_Delay(1);
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Initializes the CPU, AHB and APB busses clocks
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB busses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    Error_Handler();
  }
}

/**
  * @brief SPI1 Initialization Function
  * @param None
  * @retval None
  */
static void MX_SPI1_Init(void)
{

  /* USER CODE BEGIN SPI1_Init 0 */

  /* USER CODE END SPI1_Init 0 */

  /* USER CODE BEGIN SPI1_Init 1 */

  /* USER CODE END SPI1_Init 1 */
  /* SPI1 parameter configuration*/
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI1_Init 2 */

  /* USER CODE END SPI1_Init 2 */

}

/**
  * @brief USART1 Initialization Function
  * @param None
  * @retval None
  */
static void MX_USART1_UART_Init(void)
{

  /* USER CODE BEGIN USART1_Init 0 */

  /* USER CODE END USART1_Init 0 */

  /* USER CODE BEGIN USART1_Init 1 */

  /* USER CODE END USART1_Init 1 */
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART1_Init 2 */

  /* USER CODE END USART1_Init 2 */

}

/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);

  /*Configure GPIO pin : PA4 */
  GPIO_InitStruct.Pin = GPIO_PIN_4;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */

  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

此例程持续向USART1输出从AS5048A读取到的角度数据。

–End–

AS5048A SPI 14位磁旋转编码器_as5048a中文资料
2401_85011960的博客
05-16 638
另外要注意的地方就是,连续两次使用SPI3_ReadWriteByte(reg);的时候,中间一定要加一定的的延时,给AS5048A做应答反应的时间,不然仍然读不到有效数据。返回的值竟然是第一次发送的值,通过调试发现,无论reg是什么,第一次SPI3_ReadWriteByte(reg);返回的数值始终是0,这可以理解,也就是说16个时钟之后,CSn必须设置为高电平状态,为了复位接口内核的一些部分,于是尝试修改CS,在每次使用SPI的。发送数据0X7FFD,0XC000波形如下,从波形分析数据是正确的。
STM32F103_AS5048A-master.rar
02-24
用于绝对式编码器的位置测量程序,基于stn32f103芯片,采用spi通讯,适用于as5048a编码器,.
STM32入门教程:角度传感器应用
最新发布
吃不胖.
09-20 220
我们通过设置GPIO引脚,并读取GPIO引脚的电平值来获取角度传感器角度测量值。通过读取GPIO引脚的电平变化,我们可以获取角度传感器角度测量值。将旋转式角度传感器的VCC引脚连接到STM32的5V引脚,GND引脚连接到STM32的GND引脚。将角度传感器的信号引脚(通常标记为OUT)连接到STM32的任意一个GPIO引脚。首先,我们需要在STM32上设置GPIO引脚,以接收来自角度传感器的信号。以上代码将使能GPIOA引脚的时钟,并将GPIOA的引脚0配置为输入模式,使用上拉电阻并设置为高速模式。
STM32MXcube的SPI通讯读取AS5048A
weixin_42776330的博客
09-07 1809
AS5048A除了通过PWM向外传输数据外,还通过SPI口向外发送位置。手头的资料是寄存器SPI读写的版本,和HAL库简直不搭边,当然也因为水平限制看起来代码读的很累,尝试着将寄存器版本的库引入STM32MX生成的代码中,但是最终失败了,时间不等人,那就继续用HAL自带的库读写好了。其实最后完成了一看,HAL库真的是简单简洁,读起来很好。(寄存器运行的好像是要更快的,建议要求较高的地方还是采用寄存器方式)。 话不多说,上配置。在cube中配置好SPI通讯,注意CPOL的极性是Low。(水平还是太菜,没看懂这
基于STM32(HAL库)的直流无刷电机驱动(含AS5048A磁编码器)失败踩坑历程,为后来人做一些Tips!
weixin_45703367的博客
12-18 2185
虽然实验没有顺利完成,但程序与硬件做了尝试,现怀疑是换向程序写的有问题与硬件电路无法实现功能的问题。其中我们设A、B、C接口为直流无刷电机的U、V、W三相,从理论上来说导通给V1、V4高电平即电机的U、V两相导通,依次类推就能实现换向的功能。值得注意的是,是需要自举电路的!要驱动电机就要搞清楚原理,原理倒是很多博客有写,都是通过6桥电路实现的电子换向,但大多数都是上桥臂或下桥臂的二者其一是PWM,余下一臂则是常开,但从实际工程来说,我认为通过不断换向,常开桥臂也算是PWM波形了。2直流无刷电机应用思路。
AS5048A讲解
weixin_42142891的博客
01-14 3981
编码器角度读取流程: 一、初始化SPI。 注意这里需要初始化SPI读写位16位,平时的例程,正点原子,或者野火均是8位,需要修改下位数
STM32环境下AS5048A14位磁旋转编码器SPI通讯调试记录——我学到的东西、遇到的问题、解决的过程
ooorczgc的博客
03-16 1万+
❤ 2019.3.16 事情是这样的。 在很多天以前,老师接了个项目,问我有没有意向,我谨慎的表达了我对新事物的好奇心,对新知识的求知欲,同时又委婉的表达了我的能力有限的实际情况,然后我以为事情就这么过去了,直到半个多月之前,老师又找到我,我才知道,该来的总会来的。。。 具体来说,我这次要做的事情其实很简单,就是读一个旋转编码器的度数,并且实现能设置零点的功能。 ...
STM32F103_AS5048A-master.rar_AS5048 STM32_STM32F103_as5048a_as5
07-15
这个压缩包包含了针对AS5048A传感器的全部源代码,用于在STM32F103上实现对其的精确控制和数据读取。 AS5048A是一款高精度的磁性角度编码器,广泛应用于机器人、无人机、电机控制等领域,能够提供360度的绝对角度...
AS5047P_stm32f103test.rar_as5047p程序_stm32 AS5047P_stm32 AS513
07-15
在本文中,我们将深入探讨如何使用STM32F103微控制器通过SPI(Serial Peripheral Interface)接口与AS5047P进行通信,从而获取电机的角度信息。 首先,我们要了解STM32F103系列微控制器。这是一款基于ARM Cortex-M3...
基于stm32的AS5600角度获取.rar
12-06
- **中断处理**:为了实时获取角度变化,可以利用STM32的中断功能,当AS5600的数据准备好时触发中断。 最后,压缩包中的"角度"文件可能是示例代码、配置文件或测量结果,用于指导开发者进行实际操作。通过分析和...
STM32角度传感器
07-28
- *3* [STM32 SPI获取磁性角度传感器AS5048A角度数据](https://blog.csdn.net/hwytree/article/details/122823746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_...
spi-linux-驱动程序-读取AS5048A数据.rar
08-29
linux系统下编写 SPI 驱动程序读取 AS5048A 磁编码器芯片,接线方式为 SPI 三线制,不要接 四线制,接了四线制没有数据输出,因为程序里面没有写发送的部分,所以针对于这种芯片接了四线,不写发送部分,芯片就会进入等待中,因此接三根线芯片就自动向外发送了
AS5048A_线性角度传感器.PDF
12-12
编码器
as5048A-breakout-board:奥地利微系统公司 AS5048A 角度传感器的分线板
07-10
AS5048A 角度传感器的分线板。 可以在找到更多信息。
角度传感器,精确角度测量,数字输出
10-07
角度传感器,精确角度测量,数字输出,经典
旋转角度传感器 stm32
07-28
- *1* *2* [STM32 SPI获取磁性角度传感器AS5048A角度数据](https://blog.csdn.net/hwytree/article/details/122823746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":...
AS5048A SPI 14位磁旋转编码器
热门推荐
u014453443的博客
10-31 2万+
 请加扣扣技术交流群:460189483  在使用AS5048A的过程中出现的问题,分享一下,大家共勉! 1. SPI读取寄存器没有数据输出 根据数据手册SPI时序,如下 可知SPI工作在模式1,CLK的闲时为低电平,第二个沿采样数据,16位,SPI初始化如下:HAL库 //SPI¿Ú³õʼ»¯ //ÕâÀïÕëÊǶÔSPI3µÄ³õʼ»¯ void SPI3_Init(vo...
最简单AS5048a模块鉴别和读取数据
weixin_38297533的博客
03-28 2628
一下是根据我玩几天as5048 SPI模块的心得,对应的spi协议网上都有,所以我只说最简单的:只读模式3,网上普遍都是读写模式4,区别的就是读写模式是上次的数据,而只读模式是实时的数据 (流程–SPICS_LOW; SPI_READ_DATA;SPIC_HIGH;) 1 ,由于模块上电后,就会自动内部读取磁场,并产生相应的PWM,所以鉴别好坏最简单就是模块上电,用舵机接模块PWM口,然后用磁铁在...
STM32 SPI通信协议3——读取MAX6675温度传感器
WWester的博客
01-13 789
无论是发送还是接收都要判断一下标志位,因为串行通信的缓冲区只有一个,即是发送缓冲区,也是接收缓冲区。接收的时候也是如此。==0的时候,MAX6675启动,此时你需要发送一个激励给他,让他启动,启动后MAX6675开始发送数据,这时候就要用到SPI_I2S_ReceiveData开始接收数据。从MAX6675的数据手册能看到D15是虚假的位,D14-D3是我们的温度数据位,D2在正常工作时为0(低电平)。==0的时候SCK启动,数据线开始发送信息,此时可以读取数据,当数据读完后,再拉高电平停止发送。
写文章

热门文章

  • STM32 HAL us delay(微秒延时)的指令延时实现方式及优化 26554
  • STM32驱动全彩LED灯模块WS2812 17618
  • Electron Security Warning (Insecure Content-Security-Policy) 告警解决 17145
  • STM32 region `FLASH‘ overflowed by xxx bytes 问题解决 16139
  • STM32 纳秒级延时 (ns delay) 的指令延时实现方式及测定 12669

分类专栏

  • STM32 120篇
  • js/Node.js 23篇
  • Electron 18篇
  • C/C++ 22篇
  • ARAS PLM 20篇

最新评论

  • STM32 TIM PWM中阶操作:互补PWM输出

    icemantf: 是不是可以只用一个定时器输出做控制,将左桥臂上管和右桥臂下管接同一个信号做控制?

  • STM32 HAL UART DMA不通的问题解决及注意事项

    老衲松哥.: 而你,我的神!

  • STM32存储左右互搏 I2C总线读写FRAM MB85RC16

    AtItAgain: 你这个程序能连续读取吗

  • STM32存储左右互搏 I2C总线读写FRAM MB85RC16

    AtItAgain: 大佬,为什么我这样读取只能读取一个字节

  • STM32模拟SPI时序配置读取双路24位模数转换(24bit ADC)芯片ADS1220采样数据

    kilig_iris: 想看用fpga驱动ads1120的表情包

大家在看

  • 1553B总线测试系统 243
  • 面向对象进阶—接口练习
  • 【2024/10/22】ChatGPT国内中文版镜像网站整理合集
  • 【Java】并发韵律:多线程编程的深度探索与艺术实践
  • java计算机毕业设计办公用品管理系统(开题+程序+论文)

最新文章

  • STM32CUBEIDE FreeRTOS操作教程(七):queue队列
  • STM32CUBEIDE FreeRTOS操作教程(六):recursive mutexes递归互斥信号量
  • STM32CUBEIDE FreeRTOS操作教程(五):mutex互斥信号量
2024年20篇
2023年52篇
2022年39篇
2021年38篇
2020年20篇
2019年23篇

目录

目录

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PegasusYu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家扬州户外玻璃钢花盆玻璃钢飞机外壳雕塑偃师商场美陈长沙仿铜玻璃钢雕塑定制个性化玻璃钢雕塑设计十二生肖雕塑玻璃钢贵州玻璃钢假山雕塑白色仙鹤玻璃钢雕塑多少钱一只广东高架桥玻璃钢花盆绍兴园林玻璃钢雕塑定制哈尔滨火烈鸟玻璃钢雕塑制作商场实物美陈安阳泡沫玻璃钢人物雕塑阳江景观玻璃钢雕塑大型玻璃钢雕塑平台电话多少开封室外玻璃钢卡通雕塑公司湖南户内玻璃钢雕塑优势玻璃钢仿真水果雕塑行情信阳玻璃钢雕塑价格玻璃钢花盆设备芜湖户内玻璃钢雕塑六安欧式玻璃钢雕塑供应商无锡玻璃钢卡通雕塑品牌玻璃钢雕塑断了怎么接新乡不锈钢仿古玻璃钢人物雕塑商场中庭美陈吊饰效果图汕尾玻璃钢卡通雕塑的特点西安玻璃钢雕塑工厂衡水玻璃钢花盆商场中庭圣诞美陈吊饰香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化