stm32串口接收字符串函数.docx

上传人:b****4 文档编号:26743209 上传时间:2023-06-22 格式:DOCX 页数:11 大小:20.78KB
下载 相关 举报
stm32串口接收字符串函数.docx_第1页
第1页 / 共11页
stm32串口接收字符串函数.docx_第2页
第2页 / 共11页
stm32串口接收字符串函数.docx_第3页
第3页 / 共11页
stm32串口接收字符串函数.docx_第4页
第4页 / 共11页
stm32串口接收字符串函数.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

stm32串口接收字符串函数.docx

《stm32串口接收字符串函数.docx》由会员分享,可在线阅读,更多相关《stm32串口接收字符串函数.docx(11页珍藏版)》请在冰豆网上搜索。

stm32串口接收字符串函数.docx

stm32串口接收字符串函数

竭诚为您提供优质文档/双击可除

stm32串口接收字符串函数

  篇一:

sTm32串口库函数版例程

  sTm32串口库函数版例程

  定义:

  TxD1-----pA9-us1-Tx

  RxD1-----pA10-us1-Rx

  速率:

115200,n,8,1

  [cpp]viewplaincopyprint?

1./*Includes------------------------------------------------------------------*/

  2.#include"stm32f10x.h"

  3.#include"platform_config.h"

  4.#include"stm32f10x_usart.h"

  5.#include"misc.h"

  6.#include"stdarg.h"

  7.

  8.

  9.

  10./*privatevariables---------------------------------------------------------*/

  11.usART_InitTypeDefusART_Initstructure;

  12.uint8_tTxbuffer1[]="usARTInterruptexample:

ThisisusART1Demo";

  13.uint8_tRxbuffer1[],rec_f,tx_flag;

  14.__Iouint8_tTxcounter1=0x00;

  15.__Iouint8_tRxcounter1=0x00;

  16.

  17.uint32_tRec_Len;

  18.

  19.

  20./*privatefunctionprototypes-----------------------------------------------*/

  21.voidRcc_configuration(void);

  22.voidgpIo_configuration(void);

  23.voidnVIc_configuration(void);

  24.

  25.voidDelay(__Iouint32_tncount);

  26.voidusART_ouT(usART_TypeDef*usARTx,uint8_t*Data,...);

  27.char*itoa(intvalue,char*string,intradix);

  28.voidusART_config(usART_TypeDef*usARTx);

  29.

  30.

  31.gpIo_InitTypeDefgpIo_Initstructure;

  32.usART_InitTypeDefusART_Initstruct;

  33.usART_clockInitTypeDefusART_clockInitstruct;

  34.

  35./****************************************************************************

  36.*名称:

voidili9325_Drawpicture(u16startx,u16startY,u8Dir,u8*pic)

  37.*功能:

在指定座标范围显示一副图片

  38.*入口参数:

startx行起始座标

  39.*startY列起始座标

  40.*Dir图像显示方向

  41.*pic图片头指针

  42.*出口参数:

  43.*说明:

图片取模格式为水平扫描,16位颜色模式取模软件img2LcD

  44.*调用方法:

ili9325_Drawpicture(0,0,0,(u16*)demo);

  45.****************************************************************************/

  46.voidusART_config(usART_TypeDef*usARTx){

  47.usART_Initstructure.usART_baudRate=115200;//速率

  115200bps

  48.usART_Initstructure.usART_wordLength=usART_wordLength_8b;//

  数据位8位

  49.usART_Initstructure.usART_stopbits=usART_stopbits_1;//停止

  位1位

  50.usART_Initstructure.usART_parity=usART_parity_no;//无校验

  位

  51.usART_Initstructure.usART_hardwareFlowcontrol=usART_hardwareFlo

  wcontrol_none;//无硬件流控

  52.usART_Initstructure.usART_mode=usART_mode_Rx|usART_mode_T

  x;//收发模式

  53.

  54./*configureusART1*/

  55.usART_Init(usARTx,//配置串口参

  数函数

  56.

  57.

  58./*enableusART1ReceiveandTransmitinterrupts*/

  59.usART_ITconfig(usART1,usART_IT_Rxne,enAbLe);//使能

  接收中断

  60.usART_ITconfig(usART1,usART_IT_Txe,enAbLe);//使能

  发送缓冲空中断

  61.

  62./*enabletheusART1*/

  63.usART_cmd(usART1,enAbLe);

  64.}

  65./****************************************************************************

  66.*名称:

intmain(void)

  67.*功能:

主函数

  68.*入口参数:

  69.*出口参数:

  70.*说明:

  71.*调用方法:

  72.****************************************************************************/

  73.intmain(void)

  74.{

  75.

  76.uint8_ta=0;

  77./*systemclocksconfiguration*/

  78.Rcc_configuration();//系统时钟设置

  79.

  80./*嵌套向量中断控制器

  81.说明了usART1抢占优先级级别0(最多1位),和子优先级级别0(最多

  7位)*/

  82.nVIc_configuration();//中断源配置

  83.

  84./*对控制LeD指示灯的Io口进行了初始化,将端口配置为推挽上拉输出,口

  线速度为50mhz。

pA9,pA10端口复用为串口1的Tx,Rx。

  85.在配置某个口线时,首先应对它所在的端口的时钟进行使能。

否则无法配置成

  功,由于用到了端口b,因此要对这个端口的时钟

  86.进行使能,同时由于用到复用Io口功能用于配置串口。

因此还要使能AFIo(复

  用功能Io)时钟。

*/

  87.gpIo_configuration();//端口初始化

  88.

  89.usART_config(usART1);//串口1初始化90.

  91.usART_ouT(usART1,"****测试串口*******\r\n");//向串口1发送开机字

  符。

  92.

  93.usART_ouT(usART1,"***************************************************\r\n");

  94.usART_ouT(usART1,"\r\n");

  95.usART_ouT(usART1,"\r\n");

  96.while

(1)

  97.{

  98.if(rec_f==1){//判断是否收到一帧有效数据

  99.rec_f=0;

  100.usART_ouT(usART1,"\r\n您发送的信息为:

\r\n");

  101.usART_ouT(usART1,

  102.if(a==0){gpIo_setbits(gpIob,gpIo_pin_5);a=1;}//LeD1V6

  (V3板)V2(mInI板)明暗闪烁

  103.else{gpIo_Resetbits(gpIob,gpIo_pin_5);a=0;}

  104.}

  105.}

  106.}

  107.

  108./****************************************************************************109.*名称:

voidDelay(__Iouint32_tncount)

  110.*功能:

延时函数

  111.*入口参数:

  112.*出口参数:

  113.*说明:

  114.*调用方法:

  115.****************************************************************************/116.voidDelay(__Iouint32_tncount)

  117.{

  118.for(;ncount!

=0;ncount--);

  119.}

  120.

  121./****************************************************************************

  122.*名称:

voidusART_ouT(usART_TypeDef*usARTx,uint8_t*Data,...)123.*功能:

格式化串口输出函数

  124.*入口参数:

usARTx:

指定串口

  125.Data:

发送数组

  126....:

不定参数

  127.*出口参数:

  128.*说明:

格式化串口输出函数

  129."\r"回车符usART_ouT(usART1,"abcdefg\r")

  130."\n"换行符usART_ouT(usART1,"abcdefg\r\n")

  131."%s"字符串usART_ouT(usART1,"字符串是:

%s","abcdefg")132."%d"十进制usART_ouT(usART1,"a=%d",10)

  133.*调用方法:

  134.****************************************************************************/135.voidusART_ouT(usART_TypeDef*usARTx,uint8_t*Data,...){136.constchar*s;

  137.intd;

  138.charbuf[16];

  139.va_listap;

  140.va_start(ap,Data);

  141.

  142.while(*Data!

=0){//判断是否到达字符串结束

  符

  143.if(*Data==0x5c){//\

  144.switch(*++Data){

  145.caser:

//回车符

  146.usART_sendData(usARTx,0x0d);

  147.

  148.Data++;

  149.break;

  150.casen:

//换行符

  151.usART_sendData(usARTx,0x0a);  

  篇二:

sTm32学习之串口usART

  sTm32学习之串口usART

  sTm32的串口是相当丰富的。

最多可提供5路串口,有分数波特率

  发生器、支持单线光通信和半双工单线通讯、支持LIn、智能卡协议

  和IrDAsIRenDec规范(仅串口3支持)、具有DmA等。

串口最

  基本的设置,就是波特率的设置。

sTm32的串口使用起来还是蛮简

  单的,只要你开启了串口时钟,并设置相应Io口的模式,然后配置

  一下波特率,数据位长度,奇偶校验位等信息,就可以使用了。

  1、串口时钟使能。

串口作为sTm32的一个外设,其时钟由外设始

  终使能寄存器控制,这里我们使用的串口1是在Apb2enR寄存器

  的第14位。

除了串口1的时钟使能在Apb2enR寄存器,其他串

  口的时钟使能位都在Apb1enR。

  1、串口的作用:

用在sTm32板子和pc机通信的。

我们调试的时候,

  无法知道是否正确,就可以用sTm32的cpu,给串口输出一些信息

  给pc,我们通过屏幕(实际上是终端串口软件),可以看到这些信息,

  从而知道当前程序的错误可能出现的位置。

当然,也可以在pc的键

  盘敲打命令,让串口帮传递给sTm32板子,来执行这些命令。

  2、串口的工作模式一般有两种方式:

查询和中断

  

(1)查询:

串口程序不断地循环查询,看看当前有没有数据要它传,

  如果有,就帮助传送(可以从pc到sTm32板子,也可以从sTm32板子到pc)。

  

(2)中断:

平时串口只要打开中断即可。

如果发现有一个中断来,

  则意味着要它帮助传输数据——它就马上进行数据的传送。

同样,可

  以从pc到sTm32板子,也可以从sTm32板子到pc。

  步骤一从硬件开始学习。

大家先打开芯达sTm32开发板附带的

  原理图。

找到串口部分。

笔者把它截图如下。

我们发现,串口模块的

  电路是这样的:

sTm32的cpu引脚,通过两个pA端口的引脚pA10

  和pA9(此两个引脚复用usART),连接到一个sp3232芯片,或者

  mAx232芯片。

然后再连接到Db9串口座上。

由于232芯片可以允

  许走两路信号,因此,我们扩展了一个串口com2,请注意,如无特

  别说明,我们都将使用com1。

  sp3232een芯片能帮助把数据信号转换成电脑232接口能识别

  的信号。

其转换是自动进行的。

因此,我们只需要把要发送的数据送

  给引脚pA9,然后再串口座的引脚3上去接收数据即可。

反之,接收

  数据也是一样。

  步骤二初始化串口。

  打开《sTm32F103xxx参考手册》与《sTm32固件库使用手册》。

  们的思路和之前一样,根据固件库使用手册中给出的步骤来配置串

  口。

  1、要声明一个结构:

  gpIo_InitTypeDefgpIo_Initstructure;

  usART_InitTypeDefusART_Initstructure;这里顺便也声明了gpIo的结构。

原因是:

串口是需要使用Io口来

  进行发送和接收的。

  2、设置该结构中的成员:

  串口的结构成员设置如下:

  usART_structInit(

  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_mode=usART_mode_Rx|usART_mod

  e_Tx;

  usART_Initstructure.usART_hardwareFlowcontrol

  =usART_hardwareFlowcontrol_none;

  gpIo结构的成员设置如下:

  gpIo_structInit(

  gpIo_Initstructure.gpIo_pin=gpIo_pin_9;

  gpIo_Initstructure.gpIo_mode=gpIo_mode_AF_pp;

  gpIo_Init(gpIoA,

  gpIo_Initstructure.gpIo_pin=gpIo_pin_10;

  gpIo_Initstructure.gpIo_mode=gpIo_mode_In_FLoATIng;

  gpIo_Init(gpIoA,

  3、调用函数xxx_Init()来初始化外设(包括Io和usART):

  usART的初始化函:

usART_Init(usART1,

  由于gpIo的外设初始化已经放在成员设置后面,因此这里没有列出

  来。

  4、调用xxx_cmd(xxx,enAbLe);函数来使能外设。

  这里只需要使能usART即可。

gpIo的固件中,没有使能即可使

  用。

usART_cmd(usART1,enAbLe);由于本文档使用的是中断方式

  来触发串口收发数据,因此,我们在使能串口之前,也把发送和接收

  的中断使能打开:

  usART_ITconfig(usART1,usART_IT_Rxne,enAbLe);

  usART_ITconfig(usART1,usART_IT_Txe,enAbLe);

  5、别忘了加上外设的时钟使能哈~

  gpIoA和usART都在Apb2上。

因此我们调用的函数如下:

Rcc_Apb2periphclockcmd(Rcc_Apb2periph_usART1|Rcc_Apb2

  periph_gpIoA|Rcc_Apb2periph_gpIob|Rcc_Apb2periph_gpIoc|R

  cc_Apb2periph_gpIoD|Rcc_Apb2periph_gpIoe,enAbLe);

  步骤三操作串口收发数据

  芯达sTm32的思路是:

首先让sTm32的cpu发送一些欢迎信

  息,从串口打印出来。

然后接收中断,该中断来自键盘输入。

只要键

  盘输入一个字符,即打印出该字符,从而验证串口编程是否成功。

  固件库的函数如何让串口发送和接收数据呢?

它给我们提供了

  两个函数:

  usART_sendData();——省略函数参数

  usART_ReceiveData();

  先来看发送。

我们的程序在初始化串口之后,马上就会打印欢迎

  信息。

也就是从sTm32的cpu发送信息,在电脑屏幕上显示出来,

  只要如下操作即可:

  /*============usART打印欢迎信息==============*/

  for(i=0;Txbuf1[i]!

=\0;i++){

  usART_sendData(usART1,Txbuf1[i]);

  while(usART_getFlagstatus(usART1,usART_FLAg_Tc)==ReseT);

  }

  Txbuf1是一个发送缓存。

我们事先把数据放在这个数组里了:

  unsignedcharTxbuf1[100]="这里可以自定义需要输出到串口的字符";

  这里要注意的是,当我们发送一个字符后,必须查看状态标志,这里

  是发送是否完成的标志:

usART_FLAg_Tc,如果发送完成了,则才

  可以发送下一个数据。

函数usART_getFlagstatus();就是用来做这个

  判断的。

  下面开始另外一个操作:

键盘输入什么字符,就得显示什么字符。

  们的代码如下:

  while

(1)

  {

  gpIo_setbits(gpIoe,gpIo_pin_1);

  Rx_status=usART_getFlagstatus(usART1,usART_FLAg_Rxne);if(Rx_status==seT)

  {

  usART_sendData(usART1,usART_ReceiveData(usART1));

  while(usART_getFlagstatus(usART1,usART_FLAg_Tc)==ReseT);gpIo_Resetbits(gpIoe,gpIo_pin_1);

  Delay(0xFFFFF);

  }

  }

  先判断接收的状态标志usART_FLAg_Rxne,如果接收的寄存器非

  空,说明已经接收到键盘发送来的数据,于是就把这个数据从接收缓

  存中取出来,发送给电脑。

这样电脑就可以看到刚才敲入的字符了。

  usART_ReceiveData(usART1);这个函数是从接收缓存取出数据。

  我们在这个while中,还加入了gpIo的函数:

  gpIo_setbits(gpIoc,gpIo_pin_0);

  gpIo_Resetbits(gpIoc,gpIo_pin_0);这两个函数,setbits,表示对gpIoc端口的第0个引脚置1。

Resetbits,

  清零。

由于芯达sTm32开发板上,gpIoc端口上的第0引脚连着一

  个LeD灯,所以,我们可以通过观察LeD灯是否闪烁来判断串口是

  否正在发送。

  篇三:

sTm32F103_usART输入输出

  usART输入输出讲解

  今天总结sTm32F103串口,以工程实例来讲述。

工程现象:

1.间断发送字符

  2.接收中断(接收字符,并发送该字符)

  软件工程下载地址(360云盘):

访问密码ee52

  讲述分如下几点:

  一、串口时钟

  这里的“时钟配置”函数在bsp.c文件下面;使能串口1(Rcc_Apb2periph_usART1)时钟。

  二、usART1引脚配置

  这里的“usART1引脚配置”函数在usart.c文件下面;

  初始化串口使用引脚,包含端口引脚、频率、输出类型。

  三、串口配置

  这里的“串口配置”函数在usart.c文件下面;详见每一句后面都有注释。

  四、串口中断配置

  这里的“nVIc配置”函数在bsp.c文件下面;主要分配中断控制、中断优先级。

  五、主函数应用

  这里的“主函数”函数在main.c文件下面;间隔跳变LeD、打印(发送)字符串。

  六、中断函数

  函数在stm32f10x_it.c文件下面;

  功能:

接收一个字符串,并发送。

  想掌握更多精彩内容,请欢迎关注我的微信公众号。

  微信搜索“embeddDeveloper”,或扫描下面二维码关注

  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1