×
单片机 > 单片机程序设计 > 详情

STM32F4开发板----串口(002)

发布时间:2020-05-19 发布时间:
|

串口


1 相关串口库函数

/* Exported macro ------------------------------------------------------------*/

/* Exported functions --------------------------------------------------------*/  


/*  Function used to set the USART configuration to the default reset state ***/

void USART_DeInit(USART_TypeDef* USARTx);


/* Initialization and Configuration functions *********************************/

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);

void USART_StructInit(USART_InitTypeDef* USART_InitStruct);

void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);

void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);

void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler);

void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState);


/* Data transfers functions ***************************************************/

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

uint16_t USART_ReceiveData(USART_TypeDef* USARTx);


/* Multi-Processor Communication functions ************************************/

void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address);

void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp);

void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState);


/* LIN mode functions *********************************************************/

void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength);

void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_SendBreak(USART_TypeDef* USARTx);


/* Half-duplex mode function **************************************************/

void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState);


/* Smartcard mode functions ***************************************************/

void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime);


/* IrDA mode functions ********************************************************/

void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode);

void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState);


/* DMA transfers management functions *****************************************/

void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);


/* Interrupts and flags management functions **********************************/

void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);

void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);



2 配置步骤

使能串口时钟,GPIO时钟使能

串口复位

设置串口端口模式

串口参数初始化 使能串口

中断处理

void USART1_IRQHandler(void)                    //串口1中断服务程序

{

    u8 Res;

#if SYSTEM_SUPPORT_OS         //如果SYSTEM_SUPPORT_OS为真,则需要支持OS

    OSIntEnter();    

#endif

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)

    {

        Res =USART_ReceiveData(USART1);//(USART1->DR);    //读取接收到的数据


        if((USART_RX_STA&0x8000)==0)//接收未完成

        {

            if(USART_RX_STA&0x4000)//接收到ll了0x0d

            {

                if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始

                else USART_RX_STA|=0x8000;    //接收完成了

            }

            else //还没有接收到0x0D

            {    

                if(Res==0x0d)USART_RX_STA|=0x4000;

                else

                {

                    USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

                    USART_RX_STA++;

                    if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收

                }        

            }

        }           

  }



主函数处理部分


    while(1)

    {

        if(USART_RX_STA&0x8000)

        {                       

            len=USART_RX_STA&0x3fff;

            printf("rnÄ666:rn");

            for(t=0;t

            {

                USART_SendData(USART1, USART_RX_BUF[t]);  //向串口1发送数据

                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束

            }

            printf("rnrn");//插入换行

            USART_RX_STA=0;

        }else

        {

            times++;

            if(times%5000==0)

            {

                printf("rn串口实验:rn");

                printf("666rnrnrn");

            }

            if(times%200==0)printf("输入数据,以回车结束rn");  

            if(times%30==0)LED0=!LED0;//LED闪烁,提示系统正在运行

            delay_ms(10);   

        }

    }


关键字:STM32F4  开发板  串口 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址