历史上的今天
返回首页

历史上的今天

今天是:2025年04月10日(星期四)

正在发生

2019年04月10日 | STM32串口接收字符串并控制LED

2019-04-10 来源:eefocus

串口相关配置


GPIO_InitTypeDef GPIO_InitStructure;

    USART_InitTypeDef USART_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;          

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

  GPIO_Init(GPIOA, &GPIO_InitStructure);           


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;            

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

  GPIO_Init(GPIOA, &GPIO_InitStructure);



  USART_InitStructure.USART_BaudRate = 115200;

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;

  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(USART1, &USART_InitStructure); 

  //USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);   //接收中断  

  //USART_ITConfig(USART1, USART_IT_TXE, ENABLE);      //发送中断

  USART_Cmd(USART1, ENABLE);

  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //接收中断使能


串口中断配置


NVIC_InitTypeDef NVIC_InitStructure;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                       

  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;   

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 

  NVIC_Init(&NVIC_InitStructure); 


重定向fputc,并勾选Options - Target 中的Use Micro LIB


    USART_SendData(USART1, (uint8_t) ch);


    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)

          {}


    return ch;

这里写图片描述

串口中断服务函数,接收字符串的关键


u8 i=0; 

    if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET) 

    {

            if(USART_ReceiveData(USART1)=='n')  //串口调试助手必须是点上换行符

                { 

                    sp=0;

                    USART_REC_Finish_FLAG = 1;

                    for(i=0;i<20;i++)           //i 字符串长度

                    Rec_Buffer[i]='�';

                }

                else

                    {

                        if(sp==0)

                            {

                                for(i=0;i<20;i++)

                                SendData[i]='�';

                            }   

                            Rec_Buffer[sp] = USART_ReceiveData(USART1);

                            SendData[sp]= Rec_Buffer[sp];

                            sp=sp+1;

                    }

        }

        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) 

    { 

        USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除接收中断标志


    }


主函数


while(USART_REC_Finish_FLAG == 1)                       //等待串口接收完成标志位置1

        {   

            delay(1000);            //延时1ms


            USART_REC_Finish_FLAG = 0;      //使用完成后将串口标志位置〇




            if(strcmp(SendData, LED1ON)==0)                     //比较字符串 

                ch = '1';

            else if(strcmp(SendData, LED1OFF)==0)

                ch = '2';

            else

                ch = '3';

            printf("%c  rn",ch);



            switch(ch)

            {

                case '1':

                    LED1_ON;

                    printf("LED1 ONrn");

                break;

                case '2':

                    LED1_OFF;

                    printf("LED1 OFFrn");

                break;

                case '3':

                    LED2_TOGGLE;

                    printf("LED2 TOGGLErn");

                break;

                default:

                    printf("Error!rn");

                break;

            }


        }


效果如图 

这里写图片描述


推荐阅读

史海拾趣

南京中科微公司的发展小趣事

CSM自成立以来,便积极承担国家和地方具有战略性意义的重大攻关研发项目。其中,公司前身南京市物联网研究与产业化有限公司RFID事业部申报的“超高频与微波RFID读写器射频芯片研发”项目获得了国家工信部物联网专项资金项目资助,并在江苏省名列第一。这些项目的成功完成不仅展示了CSM在技术研发方面的实力,也为国家科技进步和产业发展做出了积极贡献。

中科银河芯(GXCAS)公司的发展小趣事
为了使三极管在输入信号为高电平时能够饱和导通,需要给基极提供足够的电流。这通常通过选择合适的基极电阻来实现。
Abracon公司的发展小趣事
三极管在饱和状态下的集电极-发射极压降(Vce)会影响输出信号的低电平值。
台湾兆欣(EMTEK)公司的发展小趣事

随着科技的不断进步和市场需求的不断变化,兆欣始终保持对新技术和新应用的敏锐洞察力。他们不断推出创新产品和技术解决方案,引领着行业的发展方向。同时,兆欣还积极与高校和科研机构合作,共同推动电子行业的创新和发展。这种持续的创新精神是兆欣在电子行业中保持领先地位的关键所在。

请注意,以上故事是基于兆欣公司的发展历程和事实进行创作的,但具体细节和数据可能因时间和市场变化而有所不同。

诚润电子(CHEVRON)公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。诚润电子深知这一点,因此在生产过程中严格把控每一个环节,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使得诚润电子的产品在市场上赢得了广泛的认可和信任。许多知名品牌都选择了诚润电子作为他们的合作伙伴,共同为消费者提供优质的电子产品。

Big-Sun Electronics Co Ltd公司的发展小趣事

随着国内市场的逐步饱和,Big-Sun Electronics Co Ltd公司开始将目光投向国际市场。公司积极参与国际电子展会,与海外客户建立起了良好的合作关系。同时,Big-Sun还与国际知名电子企业开展技术合作,共同研发新产品,进一步提升了公司的国际竞争力。

问答坊 | AI 解惑

英国设计太阳能充电衣为随身设备充电

人们外出旅行时,为手机、MP3等随身设备寻找电源充电是件麻烦事。英国广播公司25日报道,英国科研人员正在设计一种利用太阳能充电的外衣,它可以解决这个问题。     据报道,日本富士通公司和德国西门子公司的合资企业在英国剑桥设有 ...…

查看全部问答>

FPGA问题集锦, 基于FPGA的以太网控制器设计

上传个资料看看啥感觉 [ 本帖最后由 yuanhang8240 于 2009-4-28 07:56 编辑 ]…

查看全部问答>

哪种正弦波电路最为稳定可靠?

我用运放搭了个文氏电桥正弦波发生电路,结果不理想,电压稍一动,频率,波形就会变化,将电桥上的电阻反复调整,结果是尽是显示梯形波,形成正弦波的工作点很窄,而且表现不稳定,请有经验的大侠指点一下:哪种正弦波电路最为稳定可靠?…

查看全部问答>

各种电路图,够大家好好学了

各种电路图,够大家好好学了,下了就知道是好东西啊…

查看全部问答>

Ce6.0摄像头驱动不支持高分辨率格式的YUV

按照微软给的例子Camera_null来开发摄像头驱动,最近一直有个困扰,因为camera sensor ov3640过来的是YUV格式,拍照时候用到QXGA(2048*1536)分辨率,但DShow不支持,现象是CameraDshowApp.exe程序进入时候查询Pin,最终失败!我的设置如下: /* 00 ...…

查看全部问答>

请教 SPI wifi 调试

    平台:2440      wifi 模块:WM-G-MR-09 现在把GSPI8686.reg 导入,在platform.bib文件中打包 ;------------------------------SPI wifi--------------------------- GSPI8686.dll      &nbs ...…

查看全部问答>

大型ARM+linux+android嵌入式技术专题公益讲座

华清远见武汉华嵌中心将于2010年4月24日下午1:00-5:00在武汉大学联手ARM中国公司,开展“基于ARM平台的嵌入式系统设计专题讲座”。 详情请点击: http://www.embedhq.org/html/mianfei/2010/0408/382.html…

查看全部问答>

普通Linux驱动与嵌入式Linux驱动的区别

我们通常所说的Linux设备驱动和和嵌入式Linux设备驱动有神什么区别,同等情况下哪种更有钱途些…

查看全部问答>

在MIcrosoft下载了一个vs2005的evaluateion版,结果出现这个问题...

是一个2.7G的img,用winrar解压后运行vs目录里的setup.msi,结果出现windows Installer的错误“无法打开此安装程序包。请与应用程序供应商联系,以确认这是一个有效的windows Installer程序包” 这是为什么呢?好不容易下载的啊…

查看全部问答>