1 准备工作
- 硬件设备:JY62模块、六合一、USB-TTL、杜邦线、STM32F103C8T6单片机。给大家看下图片。
2)软件准备 : KEIL 5 (5.17版本的)
3)示例代码
2 接线方式
1、使用数据线将STM32F103C8T6与电脑连接通信 注意:给STM32F103C8T6需要用5V才可以
2、JY62与STM32F103C8T6使用杜邦线连接。具体接线如下图所示:
具体接线方式如下:
USB-TTL | STM32F103C8T6 | JY-62 |
---|---|---|
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.USART_BaudRate = baudrate;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, &USART_InitStructure);
USART_ITConfig(USART2, USART_IT_TXE, DISABLE); //串口2的发送端TX是不使能的
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//串口2的接收端的RX使能
使能串口中断后呢。UART2的数据都会一个个字节的往DR寄存器里面写。
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET)//由于TX中断被禁止了所以这个if是不会进入的。
{
USART_SendData(USART2, TxBuffer[TxCounter++]);
USART_ClearITPendingBit(USART2, USART_IT_TXE);
if(TxCounter == count) USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
}
else if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//直接进入RX的这个中断
{
CopeSerial2Data((unsigned char)USART2->DR);//把UART2的数据给到DR寄存器后呢,再由这个CopeSerial2Data函数把数据给到给出去了
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
USART_ClearITPendingBit(USART2,USART_IT_ORE);
}
当串口2中断接收到数据后会通过上面的CopeSerial2Data()函数。存在ucRxBuffer[250]。这个数组里面。然后就可以根据商家给的通讯协议去进行数据处理了。
void CopeSerial2Data(unsigned