中级会员
 
- 积分
- 382
- 金钱
- 382
- 注册时间
- 2013-8-31
- 在线时间
- 14 小时
|
## 1 准备工作
1) 硬件设备:JY62模块、六合一、USB-TTL、杜邦线、STM32F103C8T6单片机。给大家看下图片。

JY62

STM32F103C8T6
2)软件准备 : KEIL 5 (5.17版本的)
链接:https://pan.baidu.com/s/1SEWmixu4jtUL2HH_3Hcn2g
提取码:zryo
3)示例代码:https://pan.baidu.com/s/1sXnlT89FTTs5tONLiaPihw
## 2 接线方式
1、使用数据线将STM32F103C8T6与电脑连接通信 注意:给STM32F103C8T6需要用5V才可以
2、JY62与STM32F103C8T6使用杜邦线连接。具体接线如下图所示:
具体接线方式如下:
USB-TTL---------------STM32F103C8T6---------------JY62
VCC(5V)-------------- VCC -------------------------VCC
TX-------------------RX1(PA10),PA3---------------------------TX
RX-------------------TX1(PA9),PA2----------------------------RX
GND------------------GND, GND----------------------------GND

3 程序讲解
3.1 串口程序讲解
从上面的接线可以看出呢。一共用了32单片机的两个UART引脚。一个是UART1这个是把处理过的数据发送到PC端。一个是UART2这个是用来接收JY62传过来的数据。UART2也是使用中断来接收到数据。这些都是在初始化UART2的时候来配置的。前面那部分都是默认的串口配置。设置波特率、数据位8位、停止位1、无奇偶检验、配置串口模式。最后再初始化USART2。一般都是固定的。后面的USART_ITConfig。就是开启串口中断。
USART_InitStructure[backcolor=inherit !important].USART_BaudRate = baudrate[backcolor=inherit !important]; USART_InitStructure[backcolor=inherit !important].USART_WordLength = USART_WordLength_8b[backcolor=inherit !important]; USART_InitStructure[backcolor=inherit !important].USART_StopBits = USART_StopBits_1[backcolor=inherit !important]; USART_InitStructure[backcolor=inherit !important].USART_Parity = USART_Parity_No [backcolor=inherit !important]; USART_InitStructure[backcolor=inherit !important].USART_HardwareFlowControl = USART_HardwareFlowControl_None[backcolor=inherit !important]; USART_InitStructure[backcolor=inherit !important].USART_Mode = USART_Mode_Rx | USART_Mode_Tx[backcolor=inherit !important]; [backcolor=inherit !important]USART_Init[backcolor=inherit !important](USART2[backcolor=inherit !important], &USART_InitStructure[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]USART_ITConfig[backcolor=inherit !important](USART2[backcolor=inherit !important], USART_IT_TXE[backcolor=inherit !important], DISABLE[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//串口2的发送端TX是不使能的 [backcolor=inherit !important]USART_ITConfig[backcolor=inherit !important](USART2[backcolor=inherit !important], USART_IT_RXNE[backcolor=inherit !important], ENABLE[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]//串口2的接收端的RX使能
使能串口中断后呢。UART2的数据都会一个个字节的往DR寄存器里面写。
[backcolor=inherit !important]void [backcolor=inherit !important]USART2_IRQHandler[backcolor=inherit !important]([backcolor=inherit !important]void[backcolor=inherit !important])[backcolor=inherit !important]{ [backcolor=inherit !important]if[backcolor=inherit !important]([backcolor=inherit !important]USART_GetITStatus[backcolor=inherit !important](USART2[backcolor=inherit !important], USART_IT_TXE[backcolor=inherit !important]) != RESET[backcolor=inherit !important])[backcolor=inherit !important]//由于TX中断被禁止了所以这个if是不会进入的。 [backcolor=inherit !important]{ [backcolor=inherit !important]USART_SendData[backcolor=inherit !important](USART2[backcolor=inherit !important], TxBuffer[backcolor=inherit !important][TxCounter++[backcolor=inherit !important]][backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]USART_ClearITPendingBit[backcolor=inherit !important](USART2[backcolor=inherit !important], USART_IT_TXE[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]if[backcolor=inherit !important](TxCounter == count[backcolor=inherit !important]) [backcolor=inherit !important]USART_ITConfig[backcolor=inherit !important](USART2[backcolor=inherit !important], USART_IT_TXE[backcolor=inherit !important], DISABLE[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]} [backcolor=inherit !important]else [backcolor=inherit !important]if[backcolor=inherit !important]([backcolor=inherit !important]USART_GetITStatus[backcolor=inherit !important](USART2[backcolor=inherit !important], USART_IT_RXNE[backcolor=inherit !important]) != RESET[backcolor=inherit !important])[backcolor=inherit !important]//直接进入RX的这个中断 [backcolor=inherit !important]{ [backcolor=inherit !important]CopeSerial2Data[backcolor=inherit !important]([backcolor=inherit !important]([backcolor=inherit !important]unsigned [backcolor=inherit !important]char[backcolor=inherit !important])USART2->DR[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]//把UART2的数据给到DR寄存器后呢,再由这个CopeSerial2Data函数把数据给到给出去了 [backcolor=inherit !important]USART_ClearITPendingBit[backcolor=inherit !important](USART2[backcolor=inherit !important], USART_IT_RXNE[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]} [backcolor=inherit !important]USART_ClearITPendingBit[backcolor=inherit !important](USART2[backcolor=inherit !important],USART_IT_ORE[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]}
当串口2中断接收到数据后会通过上面的CopeSerial2Data()函数。存在ucRxBuffer[250]。这个数组里面。然后就可以根据商家给的通讯协议去进行数据处理了。
[backcolor=inherit !important]void [backcolor=inherit !important]CopeSerial2Data[backcolor=inherit !important]([backcolor=inherit !important]unsigned [backcolor=inherit !important]char ucData[backcolor=inherit !important])[backcolor=inherit !important]{ [backcolor=inherit !important]static [backcolor=inherit !important]unsigned [backcolor=inherit !important]char ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]250[backcolor=inherit !important]][backcolor=inherit !important]; [backcolor=inherit !important]static [backcolor=inherit !important]unsigned [backcolor=inherit !important]char ucRxCnt = [backcolor=inherit !important]0[backcolor=inherit !important]; [backcolor=inherit !important]LED_REVERSE[backcolor=inherit !important]([backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//接收到数据,LED灯闪烁一下 ucRxBuffer[backcolor=inherit !important][ucRxCnt++[backcolor=inherit !important]]=ucData[backcolor=inherit !important]; [backcolor=inherit !important]//将中断的数据存在了这个数组里 [backcolor=inherit !important]if [backcolor=inherit !important](ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]0[backcolor=inherit !important]]!=[backcolor=inherit !important]0x55[backcolor=inherit !important]) [backcolor=inherit !important]//数据头不对,则重新开始寻找0x55数据头 [backcolor=inherit !important]{ ucRxCnt=[backcolor=inherit !important]0[backcolor=inherit !important]; [backcolor=inherit !important]return[backcolor=inherit !important]; [backcolor=inherit !important]}
3.2数据处理部分
根据商家的协议由下图所示

根据这个协议就很好理解我写的数据处理程序。这个JY62串口输出的角度的一共是11位数据。所以,我先判断数据 的长度是不是11位,然后再判断包头是不是55。如果不是55在判断下一位是不是55。直到我找到了55这个包头,然后才进行11位数据的第二位的数据的判断,是不是50、51、52、53、54这种商家定义的代表时间、加速度、角速度、角度、磁场的数。
[backcolor=inherit !important]if [backcolor=inherit !important](ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]0[backcolor=inherit !important]]!=[backcolor=inherit !important]0x55[backcolor=inherit !important]) [backcolor=inherit !important]//数据头不对,则重新开始寻找0x55数据头 [backcolor=inherit !important]{ ucRxCnt=[backcolor=inherit !important]0[backcolor=inherit !important]; [backcolor=inherit !important]return[backcolor=inherit !important]; [backcolor=inherit !important]} [backcolor=inherit !important]if [backcolor=inherit !important](ucRxCnt<[backcolor=inherit !important]11[backcolor=inherit !important]) [backcolor=inherit !important]{[backcolor=inherit !important]return[backcolor=inherit !important];[backcolor=inherit !important]}[backcolor=inherit !important]//数据不满11个,则返回 [backcolor=inherit !important]else [backcolor=inherit !important]{ [backcolor=inherit !important]switch[backcolor=inherit !important](ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]1[backcolor=inherit !important]][backcolor=inherit !important])[backcolor=inherit !important]//判断数据是哪种数据,然后将其拷贝到对应的结构体中,有些数据包需要通过上位机打开对应的输出后,才能接收到这个数据包的数据 [backcolor=inherit !important]{ [backcolor=inherit !important]case [backcolor=inherit !important]0x50: [backcolor=inherit !important]memcpy[backcolor=inherit !important](&stcTime[backcolor=inherit !important],&ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],[backcolor=inherit !important]8[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]break[backcolor=inherit !important];[backcolor=inherit !important]//memcpy为编译器自带的内存拷贝函数,需引用"string.h",将接收缓冲区的字符拷贝到数据结构体里面,从而实现数据的解析。 [backcolor=inherit !important]case [backcolor=inherit !important]0x51: [backcolor=inherit !important]memcpy[backcolor=inherit !important](&stcAcc[backcolor=inherit !important],&ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],[backcolor=inherit !important]8[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]break[backcolor=inherit !important]; [backcolor=inherit !important]case [backcolor=inherit !important]0x52: [backcolor=inherit !important]memcpy[backcolor=inherit !important](&stcGyro[backcolor=inherit !important],&ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],[backcolor=inherit !important]8[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]break[backcolor=inherit !important]; [backcolor=inherit !important]case [backcolor=inherit !important]0x53: [backcolor=inherit !important]memcpy[backcolor=inherit !important](&stcAngle[backcolor=inherit !important],&ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],[backcolor=inherit !important]8[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]break[backcolor=inherit !important]; [backcolor=inherit !important]case [backcolor=inherit !important]0x54: [backcolor=inherit !important]memcpy[backcolor=inherit !important](&stcMag[backcolor=inherit !important],&ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],[backcolor=inherit !important]8[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]break[backcolor=inherit !important]; [backcolor=inherit !important]case [backcolor=inherit !important]0x55: [backcolor=inherit !important]memcpy[backcolor=inherit !important](&stcDStatus[backcolor=inherit !important],&ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],[backcolor=inherit !important]8[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]break[backcolor=inherit !important]; [backcolor=inherit !important]case [backcolor=inherit !important]0x56: [backcolor=inherit !important]memcpy[backcolor=inherit !important](&stcPress[backcolor=inherit !important],&ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],[backcolor=inherit !important]8[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]break[backcolor=inherit !important]; [backcolor=inherit !important]case [backcolor=inherit !important]0x57: [backcolor=inherit !important]memcpy[backcolor=inherit !important](&stcLonLat[backcolor=inherit !important],&ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],[backcolor=inherit !important]8[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]break[backcolor=inherit !important]; [backcolor=inherit !important]case [backcolor=inherit !important]0x58: [backcolor=inherit !important]memcpy[backcolor=inherit !important](&stcGPSV[backcolor=inherit !important],&ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],[backcolor=inherit !important]8[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]break[backcolor=inherit !important]; [backcolor=inherit !important]case [backcolor=inherit !important]0x59: [backcolor=inherit !important]memcpy[backcolor=inherit !important](&stcQ[backcolor=inherit !important],&ucRxBuffer[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],[backcolor=inherit !important]8[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]break[backcolor=inherit !important]; [backcolor=inherit !important]} ucRxCnt=[backcolor=inherit !important]0[backcolor=inherit !important];[backcolor=inherit !important]//清空缓存区 [backcolor=inherit !important]}[backcolor=inherit !important]}
3 UART打印程序
把上面得到的正确的格式的数据输出到电脑上。
[backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]"Time:20%d-%d-%d %d:%d:%.3f\r\n"[backcolor=inherit !important],stcTime[backcolor=inherit !important].ucYear[backcolor=inherit !important],stcTime[backcolor=inherit !important].ucMonth[backcolor=inherit !important],stcTime[backcolor=inherit !important].ucDay[backcolor=inherit !important],stcTime[backcolor=inherit !important].ucHour[backcolor=inherit !important],stcTime[backcolor=inherit !important].ucMinute[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcTime[backcolor=inherit !important].ucSecond+[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcTime[backcolor=inherit !important].usMiliSecond/[backcolor=inherit !important]1000[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]delay_ms[backcolor=inherit !important]([backcolor=inherit !important]10[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//输出加速度 [backcolor=inherit !important]//串口接受到的数据已经拷贝到对应的结构体的变量中了,根据说明书的协议,以加速度为例 stcAcc.a[0]/32768*16就是X轴的加速度, [backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]"Acc:%.3f %.3f %.3f\r\n"[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcAcc[backcolor=inherit !important].a[backcolor=inherit !important][[backcolor=inherit !important]0[backcolor=inherit !important]]/[backcolor=inherit !important]32768*[backcolor=inherit !important]16[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcAcc[backcolor=inherit !important].a[backcolor=inherit !important][[backcolor=inherit !important]1[backcolor=inherit !important]]/[backcolor=inherit !important]32768*[backcolor=inherit !important]16[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcAcc[backcolor=inherit !important].a[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]]/[backcolor=inherit !important]32768*[backcolor=inherit !important]16[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]delay_ms[backcolor=inherit !important]([backcolor=inherit !important]10[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//输出角速度 [backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]"Gyro:%.3f %.3f %.3f\r\n"[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcGyro[backcolor=inherit !important].w[backcolor=inherit !important][[backcolor=inherit !important]0[backcolor=inherit !important]]/[backcolor=inherit !important]32768*[backcolor=inherit !important]2000[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcGyro[backcolor=inherit !important].w[backcolor=inherit !important][[backcolor=inherit !important]1[backcolor=inherit !important]]/[backcolor=inherit !important]32768*[backcolor=inherit !important]2000[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcGyro[backcolor=inherit !important].w[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]]/[backcolor=inherit !important]32768*[backcolor=inherit !important]2000[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]delay_ms[backcolor=inherit !important]([backcolor=inherit !important]10[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//输出角度 [backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]"Angle:%.3f %.3f %.3f\r\n"[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcAngle[backcolor=inherit !important].Angle[backcolor=inherit !important][[backcolor=inherit !important]0[backcolor=inherit !important]]/[backcolor=inherit !important]32768*[backcolor=inherit !important]180[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcAngle[backcolor=inherit !important].Angle[backcolor=inherit !important][[backcolor=inherit !important]1[backcolor=inherit !important]]/[backcolor=inherit !important]32768*[backcolor=inherit !important]180[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcAngle[backcolor=inherit !important].Angle[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]]/[backcolor=inherit !important]32768*[backcolor=inherit !important]180[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]delay_ms[backcolor=inherit !important]([backcolor=inherit !important]10[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//输出磁场 [backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]"Mag:%d %d %d\r\n"[backcolor=inherit !important],stcMag[backcolor=inherit !important].h[backcolor=inherit !important][[backcolor=inherit !important]0[backcolor=inherit !important]][backcolor=inherit !important],stcMag[backcolor=inherit !important].h[backcolor=inherit !important][[backcolor=inherit !important]1[backcolor=inherit !important]][backcolor=inherit !important],stcMag[backcolor=inherit !important].h[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]delay_ms[backcolor=inherit !important]([backcolor=inherit !important]10[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//输出气压、高度 [backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]"Pressure:%ld Height%.2f\r\n"[backcolor=inherit !important],stcPress[backcolor=inherit !important].lPressure[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcPress[backcolor=inherit !important].lAltitude/[backcolor=inherit !important]100[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]delay_ms[backcolor=inherit !important]([backcolor=inherit !important]10[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//输出端口状态 [backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]"DStatus:%d %d %d %d\r\n"[backcolor=inherit !important],stcDStatus[backcolor=inherit !important].sDStatus[backcolor=inherit !important][[backcolor=inherit !important]0[backcolor=inherit !important]][backcolor=inherit !important],stcDStatus[backcolor=inherit !important].sDStatus[backcolor=inherit !important][[backcolor=inherit !important]1[backcolor=inherit !important]][backcolor=inherit !important],stcDStatus[backcolor=inherit !important].sDStatus[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]][backcolor=inherit !important],stcDStatus[backcolor=inherit !important].sDStatus[backcolor=inherit !important][[backcolor=inherit !important]3[backcolor=inherit !important]][backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]delay_ms[backcolor=inherit !important]([backcolor=inherit !important]10[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//输出经纬度 [backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]"Longitude:%ldDeg%.5fm Lattitude:%ldDeg%.5fm\r\n"[backcolor=inherit !important],stcLonLat[backcolor=inherit !important].lLon/[backcolor=inherit !important]10000000[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]double[backcolor=inherit !important])[backcolor=inherit !important](stcLonLat[backcolor=inherit !important].lLon % [backcolor=inherit !important]10000000[backcolor=inherit !important])/[backcolor=inherit !important]1e5[backcolor=inherit !important],stcLonLat[backcolor=inherit !important].lLat/[backcolor=inherit !important]10000000[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]double[backcolor=inherit !important])[backcolor=inherit !important](stcLonLat[backcolor=inherit !important].lLat % [backcolor=inherit !important]10000000[backcolor=inherit !important])/[backcolor=inherit !important]1e5[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]delay_ms[backcolor=inherit !important]([backcolor=inherit !important]10[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//输出地速 [backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]"GPSHeight:%.1fm GPSYaw:%.1fDeg GPSV:%.3fkm/h\r\n"[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcGPSV[backcolor=inherit !important].sGPSHeight/[backcolor=inherit !important]10[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcGPSV[backcolor=inherit !important].sGPSYaw/[backcolor=inherit !important]10[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcGPSV[backcolor=inherit !important].lGPSVelocity/[backcolor=inherit !important]1000[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]delay_ms[backcolor=inherit !important]([backcolor=inherit !important]10[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//输出四元素 [backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]"Four elements:%.5f %.5f %.5f %.5f\r\n\r\n"[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcQ[backcolor=inherit !important].q[backcolor=inherit !important][[backcolor=inherit !important]0[backcolor=inherit !important]]/[backcolor=inherit !important]32768[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcQ[backcolor=inherit !important].q[backcolor=inherit !important][[backcolor=inherit !important]1[backcolor=inherit !important]]/[backcolor=inherit !important]32768[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcQ[backcolor=inherit !important].q[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]]/[backcolor=inherit !important]32768[backcolor=inherit !important],[backcolor=inherit !important]([backcolor=inherit !important]float[backcolor=inherit !important])stcQ[backcolor=inherit !important].q[backcolor=inherit !important][[backcolor=inherit !important]3[backcolor=inherit !important]]/[backcolor=inherit !important]32768[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]delay_ms[backcolor=inherit !important]([backcolor=inherit !important]10[backcolor=inherit !important])[backcolor=inherit !important];[backcolor=inherit !important]//等待传输完成
## 4 生成下载文件。
1、在OUTUT勾选Creat HEX File

2、找到生成的HEX文件

## 5 下载程序
1、用数据线连接好STM32F103C8T6单片机和PC端。
2、按照“软件配置.png”图示设置好软件。
3、找到所需的hex文件。
4、按STM32F103C8T6单片机的红色的Bootloader 键
5、点击开始编程按钮,下载程序

## 6 输出结果显示
在电脑上正确连接好板子,首先打开串口调试助手,找到相应的端口,然后打开串口,注意这里波特率设置为9600,然后就可以观察到左边的窗口有数据输出了。如图所示:

|
|