历史上的今天
返回首页

历史上的今天

今天是:2025年03月13日(星期四)

正在发生

2019年03月13日 | STM32F4开发板----串口(002)

2019-03-13 来源:eefocus

串口


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("\r\nÄ666:\r\n");

            for(t=0;t

            {

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

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

            }

            printf("\r\n\r\n");//插入换行

            USART_RX_STA=0;

        }else

        {

            times++;

            if(times%5000==0)

            {

                printf("\r\n串口实验:\r\n");

                printf("666\r\n\r\n\r\n");

            }

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

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

            delay_ms(10);   

        }

    }


推荐阅读

史海拾趣

Dexter Research Center Inc公司的发展小趣事

作为一家有社会责任感的企业,Dexter始终关注环境保护和可持续发展问题。公司积极采用环保材料和工艺,减少生产过程中的废弃物和污染物排放。同时,Dexter还积极参与社会公益事业,为当地社区和弱势群体提供帮助和支持。这些举措不仅有助于保护环境、推动社会进步,还提升了Dexter的企业形象和品牌价值。

Comair Rotron公司的发展小趣事

1947年,James Van Ryan在美国纽约伍德斯托克创立了Comair公司,初期主要专注于风扇和风机产品的制造。当时,电子行业正处于起步阶段,对散热和空气流动的需求日益增长。Comair凭借其出色的技术和产品质量,很快在电子行业中崭露头角,为早期的电子设备提供了可靠的散热解决方案。

Faraday Technology公司的发展小趣事

随着电子行业的竞争加剧,Comair Rotron意识到单打独斗已难以满足市场需求。因此,公司开始积极寻求与行业内其他企业的合作机会。通过与多家知名电子企业建立战略合作关系,Comair Rotron不仅获得了更多的业务机会,还通过与合作伙伴的技术交流和资源共享,不断提升自身的技术水平和产品质量。

Eutech公司的发展小趣事

EUtech公司注重品牌塑造和市场拓展。他们通过参加国际展会、举办技术研讨会等方式提高品牌知名度。同时,公司积极拓展海外市场,产品已出口到新加坡、香港、韩国等国家和地区。凭借优异的产品质量和良好的市场口碑,EUtech公司逐渐在国际市场上树立起了品牌形象。

Data Device Corporation公司的发展小趣事

Data Device Corporation(DDC)成立于1964年,总部位于美国纽约。在创立之初,DDC就专注于为军事和商业航空领域提供高质量的数据接口产品。凭借其卓越的技术实力和对市场的敏锐洞察,DDC迅速在电子行业中崭露头角。通过与各大军事机构和航空公司的紧密合作,DDC不断推出符合市场需求的新产品,逐步奠定了自己在行业中的领先地位。

ECM [ECM Electronics Limited.]公司的发展小趣事

随着公司规模的扩大和产品线的丰富,ECM Electronics Limited.开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓国际市场,将产品出口到多个国家和地区。为了更好地服务全球客户,公司还设立了海外办事处和研发中心,加强与国际市场的联系和合作。通过国际化战略的实施,ECM进一步提升了品牌知名度和市场竞争力。

问答坊 | AI 解惑

串口通讯问题

pc一次向单片机发送5个字节的数,可在仿真时查看数组变量就不对,数组指针也不对,请教各位高手怎么解决?源程序如下:#include<Reg52.h>unsigned char inbuf1[4]; unsigned char count3;void init()     {   &n ...…

查看全部问答>

高分求助!进来看看,都有加分

  我想问下搞射频电子,嵌入式,通信方面分别依次要学些什么啊,最好把要看的书籍的名字写上,还有看这些书的先后顺序。我是一个电子专业的学生,想搞这些方面,虽然问题是多了点,但是那位回答的最好,分加的最多!君子一言,驷马难追! ...…

查看全部问答>

一个PCI驱动多个相同的设备

请问我有多个PCI相同的设备插在了同一台主机上,可是只有一个设备功能正常。 请教我怎样修改驱动程序让它驱动多个相同设备呢?希望各位大虾提供些思路 ,小弟是pci的初学者…

查看全部问答>

ucos iar软件

我最近正在使用IAR 编写atmega128的ucos系统  不过在isr.r90文件中,有一句汇编语句 小弟不太懂  希望高人指教。 RSEG    CODE:CODE:NOROOT(0) 这条语句中的0代表什么意思?    在写中断汇编的时候, ...…

查看全部问答>

STA后report_timing的报告分析

****************************************Report : timing        -path full        -delay max        -max_paths 1Design : adder_N4Version: Z-2 ...…

查看全部问答>

3.3 转5V用什么芯片

来自:电子工程师技术交流(12425841)…

查看全部问答>

郁闷,430控制HT1621功耗!

唉,心血来潮!用MSP430F11101A控制HT1621显示LCD,用2节5号1.5V电池供电,结果电池很快搞完了,一查430只消耗50uA电流(LPM3),那个该死的HT1621居然是150uA,哪位大侠用过,请给个注意,怎样降低HT1621的功耗?(必须保证LCD一直显示,不能关LCD) ...…

查看全部问答>

LM324中文资料

本帖最后由 dontium 于 2015-1-23 13:24 编辑 LM324中文资料 …

查看全部问答>

【MSP430共享】基于MSP430F449的数字频率计设计

摘  要: 本文主要介绍了MSP430F449单片机的性能特点,结合前置双模分频器SAB6456A和高速数字分频器74HC390的典型应用,给出了以MSP430F449为主控芯片的射频数字频率计的硬件设计和软件的主程序流程,设计出了一种全自动、数显的射频频率计。 ...…

查看全部问答>

怎么区别一块PCB板上数字模块和模拟模块

请各位大虾帮帮忙,怎么判断一个电路板上的一个模块是数字模块还是模拟模块?还是就是模拟器件与数字器件是如何确切定义是区别的?请知道的朋友帮我解答一下,对这两个概念有点混乱,先谢了!…

查看全部问答>