主函数代码部分:
?
?
#include "stm32f10x.h" ? ? ? ? ? ? ? ? ?// Device header #include "Delay.h" #include "OLED.h" #include "Serial.h" #include "LED.h" #include "string.h"
int main(void) { ?? ?OLED_Init(); ?? ?Serial_Init(); ?? ?OLED_ShowString(1,1,"TxPacket"); ?? ?OLED_ShowString(3,1,"RxPacket"); ?? ? ?? ? ?? ?while (1) ?? ?{ ?? ??? ?if(Serial_RxFlag==1) ?? ??? ?{ ?? ??? ??? ?OLED_ShowString(4, 1, " ? ? ? ? ? ? ? ?"); ?? ??? ??? ?OLED_ShowString(4, 1, Serial_RxPacket); ?? ??? ??? ?if(strcmp(Serial_RxPacket,"LED_ON")==0) ?? ??? ??? ?{ ?? ??? ??? ??? ?LED1_ON(); ?? ??? ??? ??? ?Serial_SendString("LED_ON_OK\r\n"); ?? ??? ??? ??? ?OLED_ShowString(2,1," ? ? ? ? "); ?? ??? ??? ??? ?OLED_ShowString(2,1,"LED_ON_OK"); ?? ??? ? ?} ?? ??? ??? ?else if(strcmp(Serial_RxPacket,"LED_OFF")==0) ?? ??? ??? ?{ ?? ??? ??? ??? ?LED1_ON(); ?? ??? ??? ??? ?Serial_SendString("LED_OFF_OK\r\n"); ?? ??? ??? ??? ?OLED_ShowString(2,1," ? ? ? ? "); ?? ??? ??? ??? ?OLED_ShowString(2,1,"LED_OFF_OK"); ?? ??? ? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?Serial_SendString("ERROR\r\n"); ?? ??? ??? ??? ?OLED_ShowString(2,1," ? ? ? ? "); ?? ??? ??? ??? ?OLED_ShowString(2,1,"ERROR"); ?? ??? ? ?} ?? ??? ?Serial_RxFlag = 0; ?? ?} ?} } ?
Serual代码函数:
?
?
?
?
?
?
#include "stm32f10x.h" ? ? ? ? ? ? ? ? ?// Device header #include <stdio.h> #include <stdarg.h>
uint8_t Serial_RxFlag; uint8_t Serial_RxPacket[100];//接收库函数USART_Serial_ReceiveData(USART1)的值,
void Serial_Init(void) { ?? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); ?? ?RCC_APB1PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); ?? ? ?? ?GPIO_InitTypeDef GPIO_InitStruct; ?? ?GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP; ?? ?GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9; ?? ?GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; ?? ?GPIO_Init(GPIOA,&GPIO_InitStruct); ?? ?GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU; ?? ?GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10; ?? ?GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; ?? ?GPIO_Init(GPIOA,&GPIO_InitStruct); ?? ? ?? ?USART_InitTypeDef USART_InitStruct; ?? ?USART_InitStruct.USART_BaudRate=9600; ?? ?USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None; ?? ?USART_InitStruct.USART_Mode=USART_Mode_Tx; ?? ?USART_InitStruct.USART_Parity=USART_Parity_No; ?? ?USART_InitStruct.USART_StopBits=1; ?? ?USART_InitStruct.USART_WordLength=0; ?? ?USART_Init(USART1,&USART_InitStruct); ?? ? ?? ?USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); ?? ?NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); ?? ? ?? ?NVIC_InitTypeDef NVIC_InitStruct; ?? ?NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn; ?? ?NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; ?? ?NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1; ?? ?NVIC_InitStruct.NVIC_IRQChannelSubPriority=1; ?? ?NVIC_Init(&NVIC_InitStruct); ?? ?USART_Cmd(USART1,ENABLE); ?? ? }
void Serial_SendByte(uint8_t Byte) { ?? ?USART_SendData(USART1,Byte); ?? ?while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); }
void Serial_SendArray(uint8_t *Array,uint16_t Lenth) { ?? ?uint8_t i; ?? ?for(i=0;i<Lenth;i++) ?? ?{ ?? ??? ?USART_SendData(USART1,Array[i]); ?? ?} }
void Serial_SendString(char*String) { ?? ?uint8_t i; ?? ?for(i=0;String[i]!= '\0';i++) ?? ?{ ?? ??? ?Serial_SendByte(String[i]); ?? ?} }
uint32_t ?Serial_Pow(uint16_t x,uint16_t y) { ?? ?uint32_t Return; ?? ?while(y--) ?? ?{ ?? ??? ?Return*=x; ?? ?} ?? ??? ?return Return; }
void Serial_SendNumber(uint32_t Number,uint8_t Lenth) { ?? ?uint8_t i; ?? ?for(i=0;i<Number;i++) ?? ?{ ?? ??? ?USART_SendData(USART1,Number/Serial_Pow(10,Lenth-1-i)%10+0x40); ?? ?} }
//接收数据 void USART1_IRQHandler(void) { ?? ?static uint8_t RxState=0;//分情况判断 ?? ?static uint8_t pRxPacket=0;//数组下标判断 ?? ?if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET) ?? ?{ ?? ??? ?uint8_t RxData=USART_ReceiveData(USART1); ?? ??? ?if(RxState==0) ?? ??? ?{ ?? ??? ??? ?if(RxData=='@'&&Serial_RxFlag==0) ?? ??? ??? ?{ ?? ??? ??? ??? ?RxState=1; ?? ??? ??? ??? ?pRxPacket=0; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?else if(RxState==1) ?? ??? ?{ ?? ??? ??? ?if(RxData=='\r') ?? ??? ??? ??? ?RxState=2; ?? ??? ??? ?else? ?? ??? ??? ?{ ?? ??? ??? ??? ?Serial_RxPacket[pRxPacket]=RxData; ?? ??? ??? ??? ?pRxPacket++; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?else if(RxState==2) ?? ??? ?{ ?? ??? ??? ?if(RxData=='\n') ?? ??? ??? ?{ ?? ??? ??? ??? ?RxState=0; ?? ??? ??? ??? ?Serial_RxPacket[pRxPacket]='\0'; ?? ??? ??? ??? ?Serial_RxFlag=1;//置标志位,告诉已结束 ?? ??? ??? ?} ?? ??? ?} ?? ??? ? ?? ??? ?USART_ClearITPendingBit(USART1,USART_IT_RXNE); ?? ?} } ?
Serial.h代码部分:
?
#ifndef ?__SERIAL_H #define ?__SERIAL_H
#include <stdio.h>
extern uint8_t Serial_RxFlag; extern char Serial_RxPacket[];
void Serial_Init(void); void Serial_SendByte(uint8_t Byte); void Serial_SendArray(uint8_t *Array,uint16_t Lenth); void Serial_SendString(char* String); uint32_t ?Serial_Pow(uint16_t x,uint16_t y); void Serial_SendNumber(uint32_t Number,uint8_t Lenth);
#endif ?
?
|