但是数据干系的实验是学习单片机和STM32的一道坎,此时就须要用好本文要说的串口这个调试工具。
串口通信先容

关于串口通信的先容,也可以点击阅读之前发的一篇文章。
STM32串口通信基本事理
串口通信是指外设和打算机间,通过数据旗子暗记线 、地线、掌握线等,按位进行传输数据的一种通讯办法......这种太过理论了,看似懂了,但又不懂。还是用我笔者自己的话来说吧。
串口通信便是可以把程序在单片机或者STM32芯片中运行的结果发送到电脑的一种通信办法。
如何利用串口通讯,你须要知道的几个主要的知识点:
波特率,数据传输的速率,如上图设置为9600,那么程序中也要设置为9600
硬件连接,吸收、发送交叉连接,如上图TxD->RxD,RxD->TxD
停滞位
奇偶校验
硬件数据流
个中,后3项一样平常不须要改变。
学会串口通信能做什么
学过C措辞的人都知道,程序开拓须要不断调试不断验证。很多的措辞编程软件都有很完全的程序调试功能。利用起来很方便。而我们的开拓虽然也是用C措辞,但我们的程序终极运行的环境不是在我们的开平台而是在真正的硬件系统中运行。这时想要查见地式的运行过程或者结果就不像编程软件那么方便了。
想要办理这个问题,我们这时就可以借助串口通信来把我们须要知道的结果又或者是程序运行的关键步骤发送到电脑上,我们就知道程序在硬件系统中运行是否涌现问题。51单片机可以用串口来调试,STM32可以用串口来调试,Linux开拓板也是利用串口来调试。
当你学会串口通信时,你可以开始玩WIFI模块、GSM模块、蓝牙模块、GPS模块、以及各种利用串口通信的传感器等等。有能力你还可以编写上位机软件通过串口通信来掌握设备。
串口通信须要什么
如果你只有STM32核心板,那么你还须要一个串口转USB模块和一个串口数据吸收软件还有几根杜邦线就可以了。
如果你的是比较完全的一款开拓板的话,一样平常都已经带有串口转USB模块,这样利用起来就更大略了。聪明的你是不是创造还短缺了点什么,对。没错由于还短缺了最主要的程序。想要利用串口通信当然还须要写串口通信的程序。
下文请教你如何去用,而不是写。
串口实验
关于串口的实验,之前录过一个基于HAL库来实现的视频,可以点击查看。
STM32打印数据到串口助手
而下文中的实验基于标准库实现的,与HAL比较思路是一样的。
在做一个实验时,最好把这个实验分割成几个关键的步骤,这样做的好处便是可以清晰的知道自己须要做什么,以及做完了哪些。还有哪些还没做。
下面把串口实验分成几个关键的步骤:1)串口通信利用到的GPIO引脚配置 STM32F103系列的芯片一样平常都有三个串口以上,用来调试利用的串口一样平常都是利用USART1。其他的串口配置都是一样的。
下面这段便是串口配置的程序:
GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能USART1,GPIOA时钟//USART1_TXGPIOA.9GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//PA.9GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.9//USART1_RXGPIOA.10初始化GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//PA10GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.10
串口利用的的GPIO口是PA9和PA10,以是只需配置这两个IO口的输入输出模式就可以了。
2)串口紧张参数设置(直接见地式)
USART_InitTypeDefUSART_InitStructure;//USART初始化设置USART_InitStructure.USART_BaudRate=bound;//串口波特率USART_InitStructure.USART_WordLength=USART_WordLength_8b;//数据格式,8位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);//初始化串口1USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启串口接管中断
串口参数配置无非便是配置串口的波特率、数据格式、停滞位、奇偶校验、硬件流、收发模式。除了波特率须要改变其他的参数都不须要管。直接复制拿来用。
3)串口中断配置 串口如果利用中断吸收,那么就须要配置串口的中断参数,配置项无非便是配置那个的中断源和中断的优先级。
NVIC_InitTypeDefNVIC_InitStructure;//Usart1NVIC配置NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道使能NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器
4)串口使能 便是你须要什么时候开始利用串口功能,便是一句原有的函数。
USART_Cmd(USART1,ENABLE);//使能串口1
5)编写串口中断处理函数 利用库函数开拓,所有的中断函数都是已经存在的,只是中断函数里面没有处理任何事情而已。中断函数如下:
完全的串口中断函数:
voidUSART1_IRQHandler(void){intRes=0;//定义一个变量用来吸收串口数据集if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//吸收中断(吸收到的数据必须是0x0d0x0a结尾){Res=USART_ReceiveData(USART1);//读取吸收到的数据USART_SendData(USART1,Res);//把吸收到的数据通过串口1发送出去}}
串口数据的吸收和发送的函数都是库函数供应的,想用时只需找到它直接拿来用就可以了。
6)实验征象
把程序编译烧写到STM32然后用串口转USB模块连接到电脑,在串口调试工具设置好波特率,打开串口。正常的话,那发送什么到STM32单片机,串口工具上就会收到什么。
总结
以上就完成了一个最大略的串口实验。
本文章紧张是解释串口的主要性,用来调试程序很方便。
~END~
文章转载,侵删!










