STM32:串口收发HEX文件

简介: STM32:串口收发HEX文件

主函数代码部分:7da00d10424f465f8771e8f56add3c68.png

44fe30a4e84e4fdb965ad4617ed7648a.png


#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代码函数:


08dfef3bbd0140d4907ce48b7880af76.png

007006d0f653422bab53f4d53aa87356.png

2d36152521eb4973baa443477101354a.png

8c5f0f8e54374653a6039a8b6a7ad33a.png

9305f66dd1714bb3b2e702bdf98d2b86.png

377e66b83b724334b60405c5188966c1.png

802b9e55987944608fca3220b9087bbd.png

#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代码部分:

0e1920b40269443c8884cc1057b7c11b.png

#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


相关文章
STM32串口编程基础知识讲解
STM32串口编程基础知识讲解
98 0
|
4月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
683 0
|
4月前
STM32CubeMX 串口收发一帧数据
STM32CubeMX 串口收发一帧数据
54 9
|
4月前
|
芯片
STM32CubeMX 串口数据收发
STM32CubeMX 串口数据收发
137 2
|
4月前
|
监控
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
257 0
|
6月前
|
存储 缓存 芯片
STM32--USART串口
STM32--USART串口
105 0
|
6月前
|
Java C语言
STM32使用printf重定向到USART(串口)并打印数据到串口助手
STM32使用printf重定向到USART(串口)并打印数据到串口助手
306 0
STM32(HAL库)驱动GY30光照传感器通过串口进行打印
STM32(HAL库)驱动GY30光照传感器通过串口进行打印