2-STM32串口通信实验
- 格式:ppt
- 大小:2.25 MB
- 文档页数:39
奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验NRF24L01+转 USB 虚拟串口实验实验平台:奋斗版STM32开发板Tiny 实验内容:板子通过USB加电后,先向串口1输出一串测试数据,然后USB被PC识 别出来,虚拟出一个串口号给这个USB设备,此时可以通过在PC端的串口助手类 软件选择该串口号。
进入串口软件界面,可以通过软件无线收发一帧长度最长 为32字节的数据。
该例程可以和V3及MINI板的NRF24L01 UCGUI例程配合使用。
预先需要掌握的知识 2.4G通信模块NRF24L01 1. 产品特性2.4GHz 全球开放ISM 频段,最大0dBm 发射功率,免许可证使用 支持六路通道的数据接收 低工作电压:1.9 1.9~3.6V 低电压工作 高速率:2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象(软件设置1Mbps或者2Mbps的空中传输速率) 多频点:125 频点,满足多点通信和跳频通信需要 超小型:内置2.4GHz天线,体积小巧,15x29mm(包括天线) 低功耗:当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了电流消耗。
低应用成本:NRF24L01 集成了所有与RF协议相关的高速信号处理部分,比如:自动重发丢失数据包和自动产生应答信号等, NRF24L01的SPI接口可以利用单片机的硬件SPI口连接或用单片机I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口, 便于使用低成本单片机。
便于开发:由于链路层完全集成在模块上,非常便于开发。
自动重发功能,自动检测和重发丢失的数据包,重发时间及重发次数可软件控制 自动存储未收到应答信号的数据包 自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程 载波检测—固定频率检测 内置硬件CRC 检错和点对多点通信地址控制 数据包传输错误计数器及载波检测功能可用于跳频设置 可同时设置六路接收通道地址,可有选择性的打开接收通道 标准插针Dip2.54MM 间距接口,便于嵌入式应用2.基本电气特性淘宝店铺:1奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验3. 引脚定义:4.工作方式NRF2401有工作模式有四种: 收发模式 配置模式 空闲模式 关机模式 工作模式由CE 和寄存器内部PWR_UP、PRIM_RX 共同控制,见下表:淘宝店铺:2奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验4.1 收发模式收发模式有Enhanced ShockBurstTM收发模式、ShockBurstTM收发模式和直接收发模式三种,收发模式由器件配置字决定,具体 配置将在器件配置部分详细介绍。
IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
在重新编程过程中可以使用任意类型的通信协议,如UART、I2S、SPI等。
这篇笔记分享的是使用UART方式IAP。
串口IAP实验先理一理流程(本实验是以STM32F103ZET6为例):1、实验说明做这个实验需要准备两个keil工程,一个工程用于编写IAP程序,另一个工程用于编写我们的应用程序(要实现某些功能的程序),这里我们以一个点灯程序为例。
最终,两份工程编译出来的可执行文件都需要烧写到芯片的FLASH 中。
只不过需要烧写到不同的地址,简单的示意图如下:这里,使用的STM32的型号为STM32F103ZET6,其FLASH大小是512KB,0x08000000为其FLASH被映射的地址,程序被烧写到的就是这个地址。
此处,我们的IAP程序烧写到这个地址,根据IAP程序的大小,我们在keil里可以设置合适的IAP结束地址。
注意:在没有IAP程序的情况下,0x08000000这个地址就是应用程序烧写的地址。
2、工程说明本实验用到的两个工程可按照文末的方式获取,其中IAP工程移植至ST官方例程。
下面对两个工程进行简单的说明IAP工程:(1)需要在target选项卡里设置我们IAP程序的起始地址与大小,如:这里我们的IAP程序起始地址设为0x08000000,大小设为0x3000,即IAP所能用的FLASH空间为12KB。
其中IAP所能占的占空间的大小可根据IAP的实际大小进行修改。
(2)需要修改程序中我们需要跳转到的应用程序的地址(即IAP程序的结束地址):LED工程:(1)需要在target选项卡里设置我们LED程序的起始地址与大小,如:这里我们的LED程序起地址设为0x08003000,大小设为0x10000,即LED所能用的FLASH空间为64KB。
STM32单片机串口通讯故障排除处理过程STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功,使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04.。
接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。
换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。
错误依旧。
故障排除过程:1、刚开始怀疑是接收端的错误,我是使用电脑串口,运行串口辅助调试工具接收,换成其他软件后,发现故障依旧,而且电脑软件一直是开启状态,不像和电脑软件有关。
2、使用单步调试,单步运行各个发送指令,都正常。
能收到0x01 0x02 0x03 0x04的数据。
间接的排除了不是电脑软件的问题,而是其他的错误。
3、单步调试运行虽然正常了,但连续运行时,错误依旧。
现在有点摸不到头绪了,单步运行正常,看起来编程没有出错,那故障在哪里呢?测试程序如下USART_SendData(USART2,0x01); //Awhile(USART_GetFlagStatus(USART2,USART_FLAG_TC)== RESET); //B USART_SendData(USART2,0x02); //Cwhile(USART_GetFlagStatus(USART2,USART_FLAG_TC)== RESET);USART_SendData(USART2,0x03);while(USART_GetFlagStatus(USART2,USART_FLAG_TC)== RESET);USART_SendData(USART2,0x04);while(USART_GetFlagStatus(USART2,USART_FLAG_TC)== RESET);4、猜测,也许是因为某个特殊原因,使第二个数据覆盖了首个数据,使得首个数据丢失。
STM32HAL库之串⼝详细篇(基于HAL库)⼀、基础认识(⼀) 并⾏通信原理:数据的各个位同时传输优点:速度快缺点:占⽤引脚资源多,通常⼯作时有多条数据线进⾏数据传输8bit数据传输典型连接图:传输的数据是⼆进制:11101010,则通信使⽤8条线同时进⾏数据传输,发送端⼀次性发送8位数据,接收端⼀次性接收8位数据。
(⼆) 串⾏通信原理:数据按位顺序传输优点:占⽤引脚资源少缺点:速度相对较慢,通常⼯作时只有⼀条数据线进⾏数据传输8bit数据传输典型连接图:传输的数据是⼆进制:11101010,则通信使⽤8条线同时进⾏数据传输,发送端⼀次性发送8位数据,接收端⼀次性接收8位数据。
8bit数据传输典型连接图:传输的数据是⼆进制:11101010,则通信使⽤1条线进⾏数据传输,发送端⼀次性发送1位数据,接收端⼀次性接收1位数据。
串⾏通信的分类:1.单⼯:数据只能在⼀个⽅向上传输,通信双⽅数据只能由⼀⽅传输到另⼀⽅2.半双⼯:数据可以错时双向传输,通信双⽅数据可以⽀持两个⽅向传输,但是同⼀时间只能由⼀⽅传输到另外⼀⽅。
3.全双⼯:数据可以同时双向传输,通信双⽅数据可以同时进⾏双向传输,对于其中⼀个设备来说,设备需要⽀持发送数据时可以进⾏数据接收。
串⾏通信的通讯⽅式:l 同步通信:带时钟同步信号的传输,如SPI、IIC、USART(同步)l 异步通信:不带时钟同步信号的传输,如UART、USART(异步)常见数据传输协议:(三) UART和USARTUART:通⽤异步收发器USART:通⽤同步/异步收发器,其可选使⽤异步⽅式,那将和UART⽆区别,如果是同步,则需要多⼀根时钟线(USART_CK)(四) STM32的USART注意:l 通常USART1接⼝的通信速率较快,其它USART接⼝较慢。
如STM32F103C8T6的USART1接⼝通信速率是4.5Mbps,其它USART接⼝的通信速率是2.25Mbps。
STM32f103寄存器配置串口通信主程序接收数据,上位机串口发送的数据已回车键结束,单片机接之后将所有数据发回。
#include "stm32f10x_lib.h" #include "sys.h"//#include "ioshezhi_jb.h" // 串口接受数据临时存储 // 接受完成标志 // 数据长度// 数据存储表 ,限制长度为 200 字节// 通信数据操作 for 循环控制 unsigned long i=0;int main(){Stm32_Clock_Init(); //io_init();//PA9、PA10IO 设置清零//P9 推挽输出, max50MHZ ; P10 上拉输入 RCC->APB2RSTR|=0x4000; RCC->APB2RSTR&=0xbfff; // 主频 72M 时,波特率为 9600 D 5// 主频 36M 时,波特率为 9600 // 主频 36M 时,波特率为 115200 //串口开,发送长度 8字节,无校验,发送开,接收开;//串口开,发送长度 9字节,偶校验,发送开,接收开; //( 有效数据还是 8 位长度 )D 6while (1){// shuru_init();// 计算输入口的值if(0x0020==((USART1->SR)&0x0020)) //如果接受到了一个字节的数据D 7{ res=USART1->DR; //读取串口寄存器数据并存在临时位置res D 8if(res!=0x0a){shubiao[len]=res;len++;} // 如果该数据不是回车符的最后一个//字节0x0a,则存入数表unsigned char res; unsigned char enddd=0; unsigned int len=0; unsigned charshubiao[200]; unsigned // 系统时钟设置//io 时钟以及输入输出选项设置RCC->APB2ENR|=0x4000; RCC->APB2ENR|=0x0004;//开启USART1时钟;① //开启GPIOA 口时钟;③ GPIOA->CRH&=0xfffff00f; GPIOA->CRH|=0x000008b0; //串口复位CD//串口停止复位 ④// USART1->BRR=0x1d4c;USART1->BRR=0x0ea6; // USART1->BRR=0x0139; // USART1->CR1|=0x200c;USART1->CR1|=0x340c;else{if(shubiao[le n-1]==0x0d){e nddd=1;le n--;};}; }; //如果是0x0a ,则判断前一个字符是不是 OxOd,(回车符ASCII 码为OxOaOd)//是的话则标记接受完成标志eddd 并删掉已接受到的前一个字节的数据};}寄存器注释:①、⑵ 时钟使能寄存器RCC->APB2ENR 参考不完全手册 P108页面需要开启的PORTA 和USART1的时钟使能位,分别在bit2和bit14,只要将这两位置 1就可以使能 PORTA 和USART1的时钟了。
作业1模拟串行通讯一、作业背景题目:模拟串行通讯一、题目:通过数字通道进行两个计算机系统的通讯二、目标:设计、实现一个用于数字通道串行通讯的协议三、思路与方法1. 硬件2. 软件CLK 上升沿检测DTA 的值,作为1bit ,存入寄存器中。
3. 编写程序并测试二、课程作业方案设计(一)自定义协议格式START帧头 数据长度 标识 数据 数据效验 帧尾 1Byte1Byte 1Byte 1Byte 1Byte 2Byte 1Byte 0x53 0xFE 0x01 0xDD 0x0D0C 0xFF1、起始标志:协议数据帧开始的标志,保留字为0x53。
2、帧头:同其他设备通信时首要的一致性保证,此次为0xFE 。
计算机1 计算机2GND CLKDTA3、数据长度:表示当前数据包的大小。
4、标识:可以自定义,对于不同的数据包,采用不同的标识。
比如当为温度采样问题时,该为温度采集器序号。
当为湿度采样问题时,该为湿度采集器序号。
5、真实数据:发送的数据内容,对于温度采样问题。
6、数据校验:根据前述数据所得的CRC32校验码。
7、结束标志:即帧尾,协议数据结束的标志,保留字为0xFF。
(二)、自定义协议详解1、自定义协议采用的是端到端的通信。
2、自定义的通信协议采用2条信号线,1条时钟线(CLK)和1条数据线(DTA),属于串行半双工通信。
每个从设备有自己的标识、帧头、数据、数据长度、数据校验、帧尾,主设备发送START信号(0x53)后,紧跟着发送想要数据的帧头(0xFE),当验证了帧头之后,该数据包即是我们所需的对应数据包。
3、CLK上升沿检测DTA的值,作为1bit,存入寄存器中。
没有数据传输时,DAT上恒保持高电平。
4、START信号:当检测到DAT的值为0x53时,开始传输数据。
5、帧头:0xFE—>即在CLK时钟的8个周期内,此时传输了8bit数据为1111 1110时(即0xFE),该数据包即是正确的数据包,在第一个字节后,主机立即读从机,开始接收该数据包。
stm32串口奇校验原理及程序STM32串口奇校验是一种错误检测和纠正方法,用于保证串口数据传输的准确性。
奇校验在数据位之后插入一个校验位,使得数据位与校验位的总和为奇数。
校验位的值取决于数据位中1的数量,如果数据位中1的数量为偶数,则校验位为1,否则为0。
接收方在接收数据后,会重新计算数据位中1的数量,并与接收到的校验位进行比较,如果不一致则判定数据错误。
以下是使用STM32的HAL库实现串口奇校验的示例程序:1. 首先,需要在CubeMX中配置串口接口的相关参数,包括波特率、数据位、停止位等。
在串口的配置选项中,选择奇校验位。
2. 在生成的代码中找到串口初始化函数,一般是`USARTx_Init()`,并在其配置项的`huart.Init.Parity`中选择`UART_PARITY_ODD`表示奇校验。
3. 在接收中断处理函数中,添加校验位的逻辑。
可以通过`__HAL_UART_GET_FLAG()`函数判断接收完成标志位是否置位,如果接收完成,则通过`__HAL_UART_FLUSH_DRREGISTER()`函数读取接收寄存器的值,并计算数据位中1的数量。
```cif (__HAL_UART_GET_FLAG(&huart, UART_FLAG_RXNE)){uint8_t data =__HAL_UART_FLUSH_DRREGISTER(&huart);uint8_t parityBit = 0;for (int i = 0; i < 8; i++) {parityBit += (data >> i) & 0x01;}parityBit &= 0x01;if ((parityBit == 1 && huart.Init.Parity !=UART_PARITY_ODD) || (parityBit == 0 && huart.Init.Parity != UART_PARITY_EVEN)) {// 校验错误的处理逻辑} else {// 校验正确的处理逻辑}}```以上是实现STM32串口奇校验的基本原理和示例程序。
基于STM32单片机的通信技术实验系统设计朱向庆;何昌毅;朱万鸿;钟创平【摘要】提出一种基于STM32单片机的通信技术实验系统设计方案,系统采取\"核心板+功能模块\"的设计理念,以STM32F103ZET6单片机最小系统为控制中心,集成电源模块、输入输出模块、有线通信模块、无线通信模块及信源编译码模块,能够完成通用STM32单片机的仿真与下载实验.实验结果表明,本系统具有集成度高、覆盖面大、适用性广等优点,能够有效提高学生的工程实践素质与创新思维能力,可在单片机、嵌入式系统、移动通信和物联网技术等课程的实践教学中推广使用.【期刊名称】《实验技术与管理》【年(卷),期】2019(036)008【总页数】4页(P81-84)【关键词】STM32单片机;通信技术;实验系统;仿真实验;下载实验【作者】朱向庆;何昌毅;朱万鸿;钟创平【作者单位】嘉应学院电子信息工程学院,广东梅州 514015;嘉应学院电子信息工程学院,广东梅州 514015;嘉应学院电子信息工程学院,广东梅州 514015;嘉应学院电子信息工程学院,广东梅州 514015【正文语种】中文【中图分类】TP368;TP914.33近年,互联网+、智能制造 2025、工业 4.0等概念的提出,加大了对电子信息技术人才的需求[1]。
高等教育是知识传播、应用和创新的主要途径,也是培养创新创业人才的重要途径[2-3]。
很多高校电子信息类专业都开设单片机、嵌入式系统、移动通信、物联网技术等课程。
实验仪器是实践教学必不可少的装备,而市场上现有的设备基本都是实验箱或实验台,通常存在价格贵,体积大,硬件电路资料不够公开等问题,不利于学生全面学习课程知识。
例如:移动通信实验箱多侧重于原理方面的验证,不利于做二次开发[4];物联网实验箱则侧重于传感检测、短距离无线通信[5],且通常追求功能大而全,不利于推广;单片机实验系统有很多,以51单片机和AVR单片机居多,STM32单片机也有,但侧重于通信技术应用的单片机实验系统目前还没有;即使涉及通信技术的单片机实验板,也只是单纯的某种通信技术而已,不够全面。