STM32 无中断串口代码

发布者:程序界的行者最新更新时间:2016-09-08 来源: eefocus关键字:STM32  无中断串口 手机看文章 扫描二维码
随时随地手机看文章
下面的代码是我使用STM32库编写的串口输出和读取的代码。

1、串口初始化函数:void USART_Ini(USART_TypeDef* USARTx,u16 buad)

2、串口中断开启和关闭:USART_IT(USART_TypeDef* USARTx,FunctionalState NewState)
 

3、串口接收:u16 Getch(USART_TypeDef* USARTx)

4、串口单个字符输出:void Putch(USART_TypeDef* USARTx,u16 ch)

5、串口输出字符串:void PutStr(USART_TypeDef* USARTx,u16 *SendBuf,u16 Length)
 

#include "stm32f10x_lib.h"

u16 RecDateBuffer[100];
u16 RecLen;
u8 SendDateBuffer[100];

/*******************************************************************************
* Function Name  : Uart_Ini
* Description    : 串口初始化
* Input          :
* Output         : None
* Return         :
*******************************************************************************/
void USART_Ini(USART_TypeDef* USARTx,u16 buad)
{
   USART_InitTypeDef USART_InitStructure;
   USART_ClockInitTypeDef USART_ClockIni;
   GPIO_InitTypeDef GPIO_InitStructure;

   /* Configure USART1 Tx (PA.09) as alternate function push-pull */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOD, &GPIO_InitStructure);
   
   /* Configure USART1 Rx (PA.10) as input floating */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOD, &GPIO_InitStructure);

   USART_InitStructure.USART_BaudRate = 9600;      //串口波特率 
   USART_InitStructure.USART_WordLength = USART_WordLength_8b;  //串口数据长度
   USART_InitStructure.USART_StopBits = USART_StopBits_1;   //串口停止位
   USART_InitStructure.USART_Parity = USART_Parity_No;    //串口奇偶效验位
   USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; //串口模式,开始起发送和接收
   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //串口硬件流

   USART_ClockIni.USART_Clock = USART_Clock_Disable;
   USART_ClockIni.USART_CPOL = USART_CPOL_Low;
   USART_ClockIni.USART_CPHA = USART_CPHA_2Edge;
   USART_ClockIni.USART_LastBit = USART_LastBit_Disable;

   USART_Init(USARTx,&USART_InitStructure);
   USART_ClockInit(USARTx,&USART_ClockIni); 
   /* Enable USART1 */
  USART_Cmd(USARTx, ENABLE);  //开启串口X
}
/*******************************************************************************
* Function Name  : Getch
* Description    : 串口中断开启或关闭
* Input          : USARTx:x=串口号
                   NewState: ENABLE开启中断,DISABLE关闭中断
* Output         : None
* Return         :
*******************************************************************************/
void USART_IT(USART_TypeDef* USARTx,FunctionalState NewState)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);   
  
   if(NewState==ENABLE)
   {
     USART_ITConfig(USARTx,USART_IT_RXNE | USART_IT_TXE,ENABLE);
   }
   else
   {
     USART_ITConfig(USARTx,USART_IT_RXNE | USART_IT_TXE,DISABLE);
   }
}
/*******************************************************************************
* Function Name  : Getch
* Description    : 串口接收字符
* Input          : USARTx:x=串口号
* Output         : None
* Return         :
*******************************************************************************/
u16 Getch(USART_TypeDef* USARTx)
{
   u16 ch;
   if (USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)
   {
     ch=USART_ReceiveData(USARTx);
  //return(ch);
   }
   return(ch); 
}
/*******************************************************************************
* Function Name  : GetStr
* Description    : 接收字符串
* Input          : USARTx:x=串口号
       buffer:接收字符串数组
* Output         : None
* Return         :
*******************************************************************************/
void GetStr(USART_TypeDef* USARTx)
{
    //u16 i;
 while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)
 {
   if(USART_GetFlagStatus(USARTx,USART_FLAG_ORE)==RESET)
   {
      if(RecLen<100)
   {
     RecDateBuffer[RecLen]=USART_ReceiveData(USARTx);
        RecLen++;
   }
   }
 }

}
/*******************************************************************************
* Function Name  : Putch
* Description    : 串口输出一个字符
* Input          : USARTx:x=串口号
       ch:串口输出的字符
* Output         : None
* Return         :
*******************************************************************************/
void Putch(USART_TypeDef* USARTx,u16 ch)
{
   if(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==SET)
   {
     USART_SendData(USARTx,ch);
   }
}
/*******************************************************************************
* Function Name  : PutStr
* Description    : 串口输出字符串
* Input          : USARTx:x=串口号
       SendBuf:串口输出字符串
       Length:输出长度
* Output         : None
* Return         :
*******************************************************************************/
void PutStr(USART_TypeDef* USARTx,u16 *SendBuf,u16 Length)
{
  u16 i;

  for(i=0;i
  {
    Putch(USARTx,SendBuf[i]);
  }
}

关键字:STM32  无中断串口 引用地址:STM32 无中断串口代码

上一篇:stm32+sdio+fatfs文件系统 源码分析
下一篇:车载GPS导航系统的设计

推荐阅读最新更新时间:2024-03-16 15:09

STM32的GPIO工作原理
STM32引脚说明 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。 STM32的大部分引脚除了当GPIO使用之外,还可以复用位外设功能引脚(比如串口),这部分在【STM32】STM32端口复用和重映射(AFIO
[单片机]
<font color='red'>STM32</font>的GPIO工作原理
STM32_EXIT中断
今天的软件工程下载地址(360云盘): https://yunpan.cn/cPhvyer3vIwXh 访问密码 57e1 STM32F10x的资料可以在我360云盘下载: https://yunpan.cn/crBUdUGdYKam2 访问密码 ca90 工程概要说明:定义一个按键(可自己定义),每按键一次,响应中断一次,在中断函数中LED提示灯变化一次,用户可更加实际情况在中断函数做出相应操作,这里只是一个模板。 关于“STM32F103 EXIT中断” 我把重要的几点在下面分别讲述,若不明白,请关注微信公众号“EmbeddDeveloper”查阅或留言。 一、RCC时钟配置 该函数位于在bsp.c
[单片机]
STM32_EXIT<font color='red'>中断</font>
stm32控制mpu9250九轴传感器
1.hardware mpu mpu9250 同时新增加一个DMP文件夹 2.hallib 无 3.设置 记得要define,同时屏蔽部分代码,不然报错。同时上位机的波特率要设置好,同时关掉数据校验。 4.main #include mpu.h #include mpu9250.h #include inv_mpu.h #include inv_mpu_dmp_motion_driver.h u8 t1=0,report=1; //默认开启上报 u8 key1; float pitch,roll,yaw; //欧拉角 short aacx,aacy,aacz; //加速度传感
[单片机]
<font color='red'>stm32</font>控制mpu9250九轴传感器
利用树莓派打造STM32无线在线调试器!
不知各位嵌入式开发者有没有遇到这样的经历:J-link的线长限制了我们编程的姿势,很多时候我们的工程都需要板子产生一些位移(比如调小车之类的),这时候J-link的线会让我们Debug的过程变得非常痛苦。。。那么有没有办法让我们解决这个数据线的痛苦呢??答案是当然有的!只要有着一颗折腾的心,办法总是会慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢慢想出来的。本人最近一直在弄一个相关工程,因为被线限制的非常痛苦,于是就考虑出了使用树莓派作为J-link的服务器然
[单片机]
利用树莓派打造<font color='red'>STM32</font>无线在线调试器!
STM32标准库转LL库代码
一、四种库比较 LL库,即STM32Cube Low-Layer,也叫Cube LL、Cube底层库等。 开发STM32通常有四种“库”,寄存器、标准外设库、HAL、LL。 早在2014年,ST推出了STM32CubeMX这款工具,同步推出了对应的STM32Cube HAL库。 但是,HAL存在一些问题:代码量大、执行效率低等缺点。 因此,在2017年,ST推出了STM32Cube LL库,目的就是为了解决的HAL库的缺点,让开发STM32的工程师有更多的选择。 之前有工程师总结了寄存器、标准外设库、HAL、LL四种库的代码性能: (来源ST社区) 针对上图(Flash、 SRAM 占用量和执行代码的效率这三项指标对比
[单片机]
<font color='red'>STM32</font>标准库转LL库代码
STM32学习笔记001:点亮RGB
我学习stm32使用的是f103c8t6核心板、洞洞板和外设,并没有使用开发板,我个人的观点是不要被开发板限制住,接线也是一门学问,可以同时学到些电路的知识,一举两得;我参考的是正点原子的教程,但是用的芯片和他们不一样,工程结构有借鉴,但是不完全一样,代码都是自己一行行敲的,也不涉及抄袭,就是想记录一下自己的学习过程,在这声明一下。 下载和调试器是 jlink ob ,tb上那种20多的就可以 配置MDK和建工程就跳过了,网上有详细教程,认真看看都会 工程文件里最重要是单片机的启动文件,一定要选对,比如我这个就是startup_stm32f10x_md.s,就是中等容量的f103芯片 下面上代码,注释都很清晰了,点
[单片机]
基于STM32动态密码锁(手机APP)
1. 前言 前一版设计了一款物联网的密码锁,采用MQTT协议连接物联网服务器进行交互,这一版是本地动态密码锁。采用局域网方式完成网络连接,与门锁进行交互,通信设置,生成密码种子,进行动态密匙比对。 这款智能电子密码锁,以STM32单片机为主控制器,由触摸矩阵键盘、ESP8266、步进电机等模块组成,具有手机APP控制、随机密码生成等功能。 当前支持的开锁方式: (1)手机APP远程开锁。支持手机APP远程开锁。手机APP连接上ESP8266创建的WIFI热点和TCP服务器,可以在手机APP上对设备端的RTC时间进行校准,设备唯一ID获取,生成随机开锁密码。 (2)随机密码开锁。手机APP与本地设备采用时间、作为算法种子
[单片机]
基于<font color='red'>STM32</font>动态密码锁(手机APP)
STM32触摸按键原理和电路设计
01触摸按键原理 触摸使用RC充放电原理: RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用的电路。 充电过程: 电源通过电阻给电容充电,由于一开始电容两端的电压为0,所以电压的电压都在电阻上,这时电流大,充电速度快。随着电容两端电压的上升,电阻两端的电压下降,电流也随之减小,充电速度小。充电的速度与电阻和电容的大小有关。电阻R越大,充电越慢,电容C越大,充电越慢。衡量充电速度的常数t(tao)=RC。 放电过程: 电容C通过电阻R放电,由于电容刚开始放电时电压为E,放电电流I=E/R,该电流很大,所以放电速度很快。随着电容不断的放电,电容的电压也随着下降。电流也很快减小。电容的放电速度与RC有关,R的阻值
[单片机]
<font color='red'>STM32</font>触摸按键原理和电路设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved