STM32F4 串口二配置使用

以下是usart.c文件

#include "delay.h"
#include "usart2.h"
#include "stdarg.h" 
#include "stdio.h" 
#include "string.h" 
//??????? 
__align(8) u8 USART2_TX_BUF[USART2_MAX_SEND_LEN]; //????,??USART2_MAX_SEND_LEN??
#ifdef USART2_RX_EN  //??????? ??
//??????? 
u8 USART2_RX_BUF[USART2_MAX_RECV_LEN]; //????,??USART2_MAX_RECV_LEN???.


u16 USART2_RX_STA = 0;
void USART2_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //????(?????????0x0d 0x0a??)
{
res =USART_ReceiveData(USART2);//(USART1->DR); //????????

if((USART2_RX_STA&0x8000)==0)//?????
{
            if(USART2_RX_STA&0x4000)//????0x0d
            {
                if(res!=0x0a)USART2_RX_STA=0;//????,????
                else USART2_RX_STA|=0x8000; //??????
            }
            else //????0X0D
            { 
                if(res==0x0d)USART2_RX_STA|=0x4000;
                else
            {
                USART2_RX_BUF[USART2_RX_STA&0X3FFF]=res ;
                USART2_RX_STA++;
                if(USART2_RX_STA>(USART2_MAX_RECV_LEN-1))USART2_RX_STA=0;//??????,?????? ?
            }
            }
} 
}

}
#endif 



//bound:??? ?
void usart2_init(u32 bound)
{ 
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

//1.??????GPIO?????
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //??GPIOA??
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//??USART2??
//2.????????? 
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2???USART2
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3???USART2 ?
//3.GPIO??????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //GPIOA2?GPIOA3???
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//??50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //??????
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //??
GPIO_Init(GPIOA,&GPIO_InitStructure); //???GPIOA2,?GPIOA3
//4.???????:?????,??,???????
USART_InitStructure.USART_BaudRate = bound;//????????9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//???8?????
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); //?????2??
//5.???NVIC
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//?????0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //????3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ????
NVIC_Init(&NVIC_InitStructure); //??????????VIC???
//6.????
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//???? ?
//7.???? 
USART_Cmd(USART2, ENABLE); //?????

NVIC_EnableIRQ(USART2_IRQn);

}

以下是usart.h文件

#ifndef __USART2_H
#define __USART2_H 
#include "sys.h" 

#define USART2_MAX_RECV_LEN 400 //?????????
#define USART2_MAX_SEND_LEN 400 //?????????
#define USART2_RX_EN 1 //0,???;1,??.

extern u8 USART2_RX_BUF[USART2_MAX_RECV_LEN]; //????,??USART2_MAX_RECV_LEN??
extern u8 USART2_TX_BUF[USART2_MAX_SEND_LEN]; //????,??USART2_MAX_SEND_LEN??
extern u16 USART2_RX_STA;  //??????

void usart2_init(u32 bound); //??2????


#endif

使用方法与串口一一致

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 12,943评论 0 13
  • 姓名:周崇杰 学号:16140120059 专业:机械设计制造及其自动化 转载自:http://blog.csd...
    CJbaby阅读 8,814评论 0 3
  • 1. 前言   USART是通用(U)同步(S)异步(A)收(R)发(T)器。  STM32F103VGT6上有3...
    dogo_L1L阅读 8,033评论 0 0
  • 大学的时候,帮朋友写的操作系统调研的作业,最近整理过去的文档时候偶然发现,遂作为博客发出来。 从串口驱动到Linu...
    free_will阅读 12,137评论 7 59
  • 老太太今年90岁了,一头白发烫成短发卷,总给人干净利索的感觉,出门一定要穿戴整齐,梳理好头发,再拎上一个小包...
    鬼鬼YDan阅读 3,838评论 0 0