STM32单片机串口驱动C语言例程_第1页
STM32单片机串口驱动C语言例程_第2页
STM32单片机串口驱动C语言例程_第3页
STM32单片机串口驱动C语言例程_第4页
STM32单片机串口驱动C语言例程_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

STM32串口驱动例程定义:TXD1——PA9-US1-TXRXD1——PA10-US1-RX速率:115200,n,8,1[cpp]viewplaincopyprint?/*Includes */#include"stm32f10x.h"#include"platform_config.h"#include"stm32f10x_usart.h"#include"misc.h"#include"stdarg.h"7.8.9./*Privatevariables */USART_InitTypeDefUSART_InitStructure;uint8_tTxBuffer1[]="USARTInterruptExample:ThisisUSART1DEMO";uint8_tRxBuffer1[],rec_f,tx_flag;__IOuint8_tTxCounter1=0x00;__IOuint8_tRxCounter1=0x00;16.uint32_tRec_Len;18.19./*Privatefunctionprototypes */voidRCC_Configuration(void);voidGPIO_Configuration(void);voidNVIC_Configuration(void);24.voidDelay(__IOuint32_tnCount);voidUSART_OUT(USART_TypeDef*USARTx,uint8_t*Data,...);char*itoa(intvalue,char*string,intradix);

voidUSART_Config(USART_TypeDef*USARTx);GPIO_InitTypeDefGPIO_InitStructure;USART_InitTypeDefUSART_InitStruct;USART_ClocklnitTypeDefUSART_ClocklnitStruct;名称:voidili9325_DrawPicture(u16StartX,u16StartY,u8Dir,u8*pic)*功能:在指定座标范围显示一副图片*入口参数:StartX 行起始座标StartY 列起始座标Dir 图像显示方向pic 图片头指针*出口参数:无*说明:图片取模格式为水平扫描, 16位颜色模式取模软件img2LCD调用方法:ili9325_DrawPicture(0,0,0,(u16*)demo);voidUSART_Config(USART_TypeDef*USARTx){5.USART_InitStructure.USART_BaudRate=115200;//速率USART_InitStructure.USART_BaudRate=115200;//速率115200bpsUSART_InitStructure.USART_WordLength=USART_WordLength_8b; //数据位8位USART_InitStructure.USART_StopBits=USART_StopBits_1;//停止USART_InitStructure.USART_Parity=USART_Parity_No;//无校验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;//x;//收发模式/*ConfigureUSART1*///配置串口参USART_Init(USARTx,&USART_InitStructure);//配置串口参数函数

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./*对控制LED指示灯的10口进行了初始化,将端口配置为推挽上拉输出,口线速度为50Mhz。PA9,PA10端口复用为串口1的TX,RX。在配置某个口线时,首先应对它所在的端口的时钟进行使能。否则无法配置成功,由于用到了端口B,因此要对这个端口的时钟86.进行使能,冋时由于用到复用10口功能用于配置串口。用功能10)时钟。*/因此还要使能AFIO(复87.GPIO_Configuration(); // 端口初始化88.89.USART_Config(USART1); //串口1初始化90.91.USART_0UT(USART1,"**** 测试串口*******\r\n"); //向串口1发送开机字符。92.93.UsartOUT(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,&TxBuffer1[0]);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.118.for(;nCount!=0;nCount--);22.123.*功能:格式化串口输出函数124.*入口参数:121.122.123.*功能:格式化串口输出函数124.*入口参数:USARTx:指定串口125.Data: 发送数组/*****************************************************************************名称:voidUSART_OUT(USART_TypeDef*USARTx,uint8_t*Data,...)126.127.*出口参数:无128.明:格式化串口输出函数129."\r"回车符USART_OUT(USART1,"abcdefgW")130."\n"换行符USART_OUT(USART1,"abcdefg\r\n")131."%s"字符串USART_OUT(USART1,"字符串是:%s","abcdefg")132."%d"十进制126.127.*出口参数:无128.明:格式化串口输出函数129."\r"回车符USART_OUT(USART1,"abcdefgW")130."\n"换行符USART_OUT(USART1,"abcdefg\r\n")131."%s"字符串USART_OUT(USART1,"字符串是:%s","abcdefg")132."%d"十进制USART_OUT(USART1,"a=%d",10)133.*调用方法:无不定参数35.136.constchar*s;137.intd;138.charbuf[16];139.va_listap;140.va_start(ap,Data);141.142.while(*Data!=O){// 判断是否到达字符串结束143.if(*Data==0x5c){〃'\'144.switch(*++Data){145.case'r'://回车符146.USART_SendData(USARTx,0x0d);148.Data++;149.break;150.case'n':136.constchar*s;137.intd;138.charbuf[16];139.va_listap;140.va_start(ap,Data);141.142.while(*Data!=O){// 判断是否到达字符串结束143.if(*Data==0x5c){〃'\'144.switch(*++Data){145.case'r'://回车符146.USART_SendData(USARTx,0x0d);148.Data++;149.break;150.case'n'://换行符77.152.Data++;153.break;154.155.default:156.Data++;157.break;158.}159.160.161.}162.elseif(*Data=='%'){//163.switch(*++Data){164.case's':// 字符串165.s=va_arg(ap,constchar*);166.for(;*s;s++){167.USART_SendData(USARTx,*s);168.while(USART_GetFlagStatus(USARTx,USART_I==RESET);FLAG_TC)}Data++;break;case'd': //十进制d=va_arg(ap,int);itoa(d,buf,10);for(s=buf;*s;s++){USART_SendData(USARTx,*s);while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);178.}179.Data++;180.break;181.default:182.Data++;183.break;184.}185.186.187.);000018.elseUSART_SendData(USARTx,*Data++);while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET}}/******************************************************整形数据转字符串函数char*itoa(intvalue,char*string,intradix)radix=10标示是10进制 非十进制,转换结果为 0;例:d=-379;执行itoa(d,buf,10);后buf="-379"**********************************************************/char*itoa(intvalue,char*string,intradix){inti,d;intflag=0;char*ptr=string;/*Thisimplementationonlyworksfordecimalnumbers.*/if(radix!=10){*ptr=0;returnstring;}if(!value){*ptr++=0x30;*ptr=0;returnstring;

/*ifthisisanegativevalueinserttheminussign.*/if(value<0){*ptr++='-';/*Makethevaluepositive.*/value*=-1;}for(i=10000;i>0;i/=10){d=value/i;if(d||flag){*ptr++=(char)(d+0x30);value-=(d*i);flag=1;}}/*Nullterminatethestring.*/*ptr=0;returnstring;}/*NCL_ltoa*//*****************************************************************************名称:voidRCC_Configuration(void)*功能:系统时钟配置为 72MHZ,外设时钟配置*入口参数:无52.253.*出口参数:无254254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283*说明:*调用方法:无****************************************************************************/voidRCC_Configuration(void){Systemlnit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);}/*****************************************************************************名称:voidGPIO_Configuration(void)*功能:通用IO口配置*入口参数:无*出口参数:无*说明:*调用方法:****************************************************************************/voidGPIO_Configuration(void){GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; 〃LED1 控制--PB5GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;// 推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_5OMHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //USART1TXGPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;// 复用推挽输出GPIO_Init(GPIOA,&GPIO_InitStructure); //A 端口//USART1RXGPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;

//USART1RX284.GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //复用开漏输入285.GPIO_Init(GPIOA,&GPIO_InitStructure); //A 端口286.}287.288./*******************************

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论