本期就来讲解使用STM32开发板连接道生物联TKB-623评估板进行数据发送,主要还是测试AT指令的使用,板子连接如下图所示。

其中连接STM32板子的TKB-623用来作为发送版,使用AT指令写好的代码如下:
void TK8620_Init(void)
{
char str[256] = {0};
TK8620_Clear();
HAL_UART_Receive_IT(UART_TK8620, &rx1_data, 1);
TK8620_SendCmd("AT+RST\r\n", "AT_OK");
HAL_Delay(3000);
printf("复位芯片 \r\n");
while(TK8620_SendCmd("AT\r\n", "AT_OK"))
HAL_Delay(200);
printf("AT 链路检查 \r\n");
while(TK8620_SendCmd("AT+VER?\r\n", "AT_OK"))
HAL_Delay(200);
while(TK8620_SendCmd("AT+RSTPARA\r\n", "AT_OK"))
HAL_Delay(200);
while(TK8620_SendCmd("AT+WORKMODE=21\r\n", "AT_OK"))
HAL_Delay(200);
printf("设置突发工作模式 \r\n");
while(TK8620_SendCmd("AT+FREQ=510000000,510000000,510000000,510000000\r\n", "AT_OK"))
HAL_Delay(200);
printf("设置发送频率、接收频率及BCN 频率 \r\n");
while(TK8620_SendCmd("AT+RATE=18\r\n", "AT_OK"))
HAL_Delay(200);
printf("设置速率 \r\n");
while(TK8620_SendCmd("AT+TXP=15\r\n", "AT_OK"))
HAL_Delay(200);
printf("设置发送功率 \r\n");
while(TK8620_SendCmd("AT+DEST=04:03:02:01\r\n", "AT_OK"))
HAL_Delay(200);
printf("设置目的设备地址 \r\n");
}
主函数代码如下
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------/
/ USER CODE BEGIN Includes */
#include <string.h>
#include "tk8620.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------/
/ USER CODE BEGIN PTD */
/* 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 ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------/
void SystemClock_Config(void);
/ USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------/
/ USER CODE BEGIN 0 /
uint8_t data[] = "i love you";
/ USER CODE END 0 */
/**
- [url=home.php?mod=space&uid=2666770]@Brief[/url] 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_USART2_UART_Init();
MX_USART1_UART_Init();
MX_USART3_UART_Init();
/ USER CODE BEGIN 2 */
TK8620_Init();printf("TK8620---------------\r\n");
//Test data
uint8_t pub_uint8 = 1;
uint16_t pub_uint16 = 2;
uint32_t pub_uint32 = 3;
float pub_float = 1.1;
double pub_double = 2.2;
printf("TK8620--------------\r\n");
float f = 3.1415926;
#if 1
unsigned char floatstring[33] = {0};
printf("fpval = %f\n", f);
fptostring((void*)&f, (unsigned char*)floatstring, sizeof(f));
printf("floathex = %s\n", floatstring);
if (isfpstring((void*)&f, (unsigned char*)floatstring, sizeof(f)))
{
printf("fpval = %f\n", f);
}
else
{
printf("Error converting floating point from hex.\n");
}
#endif
//HAL_Delay(2000);
/* USER CODE END 2 */
/* Infinite loop /
/ USER CODE BEGIN WHILE /
while (1)
{
/ USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(timer2_flag)
{
timer2_flag = 0;
TK8620_SendFloat(f);
}
}
/* USER CODE END 3 */
}
1。重启

2。AT测试

3。版本测试

4。固件默认参数

5。设置突发工作模式

6。设置频率,我设置为最大510MHZ

7。设置速率,拉到最大

8。设置发送功率,设为最大

9。设置目的地址 04:03:02:01

同理,在另一块TKB-623上通过串口助手设置好后,就可以接收数据了
10。打开串口助手,通过STM32发送PI圆周率 3.1415926给另一块TKB-623
11。打开浮点数转字符串工具,输入3.1415926

可以看到对应的16进制字符串是 0x40490FDA
打开串口助手查看,另一块板子上的数据

因为ARM处理器是大端模式,所以字节序是反的,需要注意
+DI: LEN 4, SLOT 0, SNR 18, RSSI -60, Data DA0F4940
至此,数据传输正确