学习STM32单片机,绕不开的串口 刚开始学单片机的你,是不是会因用程序把LED点亮而感到高兴,会因用程序把数码管点亮而感到高兴。这是好事,这也是想继续学习下去的动力。 但是数据相关的实验是学习单片机和STM32的一道坎,此时就需要用好本文要说的串口这个调试工具。 串口通信介绍 SugarlesS:STM32串口通信基本原理 串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式……这种太过理论了,看似懂了,但又不懂。还是用我笔者自己的话来说吧。 串口通信就是可以把程序在单片机或者STM32芯片中运行的结果发送到电脑的一种通信方式。
如何使用串口通讯,你需要知道的几个重要的知识点: 波特率,数据传输的速度,如上图设置为9600,那么程序中也要设置为9600 硬件连接,接收、发送交叉连接,如上图TxD->RxD,RxD->TxD 停止位 奇偶校验 硬件数据流 其中,后3项一般不需要改变。 学会串口通信能做什么 学过C语言的人都知道,程序开发需要不断调试不断验证。很多的语言编程软件都有很完整的程序调试功能。使用起来很方便。而我们的开发虽然也是用C语言,但我们的程序最终运行的环境不是在我们的开平台而是在真正的硬件系统中运行。这时想要查看程序的运行过程或者结果就不像编程软件那么方便了。 想要解决这个问题,我们这时就可以借助串口通信来把我们需要知道的结果又或者是程序运行的关键步骤发送到电脑上,我们就知道程序在硬件系统中运行是否出现问题。51单片机可以用串口来调试,STM32可以用串口来调试,Linux开发板也是使用串口来调试。 当你学会串口通信时,你可以开始玩WIFI模块、GSM模块、蓝牙模块、GPS模块、以及各种使用串口通信的传感器等等。有能力你还可以编写上位机软件通过串口通信来控制设备。 串口通信需要什么 如果你只有STM32核心板,那么你还需要一个串口转USB模块和一个串口数据接收软件还有几根杜邦线就可以了。 如果你的是比较完整的一款开发板的话,一般都已经带有串口转USB模块,这样使用起来就更简单了。聪明的你是不是发现还缺少了点什么,对。没错因为还缺少了最重要的程序。想要使用串口通信当然还需要写串口通信的程序。 下文就教你如何去用,而不是写。 串口实验 在做一个实验时,最好把这个实验分割成几个关键的步骤,这样做的好处就是可以清晰的知道自己需要做什么,以及做完了哪些。还有哪些还没做。 下面把串口实验分成几个关键的步骤:1)串口通信使用到的GPIO引脚配置 STM32F103系列的芯片一般都有三个串口以上,用来调试使用的串口一般都是使用USART1。其他的串口配置都是一样的。 下面这段就是串口配置的程序: GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟 //USART1_TX GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.9 //USART1_RX GPIOA.10初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.10 串口使用的的GPIO口是PA9和PA10,所以只需配置这两个IO口的输入输出模式就可以了。 2)串口主要参数设置(直接看程序) USART_InitTypeDef USART_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); //初始化串口1 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启串口接受中断 串口参数配置无法就是配置串口的波特率、数据格式、停止位、奇偶校验、硬件流、收发模式。除了波特率需要改变其他的参数都不需要管。直接复制拿来用。 3)串口中断配置 串口如果使用中断接收,那么就需要配置串口的中断参数,配置项无法就是配置那个的中断源和中断的优先级。 NVIC_InitTypeDef NVIC_InitStructure; //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 4)串口使能 就是你需要什么时候开始使用串口功能,就是一句原有的函数。 USART_Cmd(USART1, ENABLE); //使能串口1 5)编写串口中断处理函数 使用库函数开发,所有的中断函数都是已经存在的,只是中断函数里面没有处理任何事情而已。中断函数如下:
完整的串口中断函数: void USART1_IRQHandler(void) { int Res=0; //定义一个变量用来接收串口数据集 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) { Res =USART_ReceiveData(USART1); //读取接收到的数据 USART_SendData(USART1,Res ); //把接收到的数据通过串口1发送出去 } } 串口数据的接收和发送的函数都是库函数提供的,想用时只需找到它直接拿来用就可以了。 6)实验现象 把程序编译烧写到STM32然后用串口转USB模块连接到电脑,在串口调试工具设置好波特率,打开串口。正常的话,那发送什么到STM32单片机,串口工具上就会收到什么。 总结 以上就完成了一个最简单的串口实验。 本文章主要是说明串口的重要性,用来调试程序很方便。 END 超70G的基于STM32物联网开发资料零基础到实战、STM32热门项目合集内含丰富的STM32的设计理念、开发原理、项目实施过程、全国电赛优秀作品合集、物联网理论与实践、IoT-ARM、ESP32教程、四轴飞行器设计制作等资料合集STM32物联网:https://sigusoft/e8XHeG40个G的百度网盘C语言、C++、Linux从入门、进阶到精通覆盖所有知识点,还有视频教程讲解、C语言的项目源码大全C语言/C++/Linux教程合集:https://sigusoft/8SpsNv
丨 整理文章为传播相关技术,版权归原作者所有丨 丨如有侵权,请联系删除丨
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/77921.html