第九章 串口实验-ALIENTEK 战舰STM32开发板
- 格式:pdf
- 大小:923.24 KB
- 文档页数:10
STM32-串⼝配置与使⽤1、通讯基础串⾏通讯与并⾏通讯串⾏通信设备之间通过少量数据信号线(⼀般是 8 根以下),地线以及控制信号线,按数据位形式⼀位⼀位地传输数据。
同⼀时刻只能传输⼀个数据位的数据并⾏通讯使⽤ 8、16、32 及 64 根或更多的数据线进⾏传输的通讯⽅式可同时传输多个数据位的数据全双⼯、半双⼯及单⼯通讯全双⼯在同⼀时刻,两个设备之间可以同时收发数据半双⼯两个设备之间可以收发数据,但不能在同⼀时刻进⾏单⼯在任何时刻都只能进⾏⼀个⽅向的通讯,即⼀个固定为发送设备,另⼀个固定为接收设备同步通讯、异步通讯同步通讯收发设备双⽅使⽤⼀根信号线表⽰时钟信号,在时钟信号的驱动下双⽅进⾏协调,同步数据通讯中通常双⽅会统⼀规定在时钟信号的上升沿或下降沿对数据线进⾏采样异步通讯不使⽤时钟信号进⾏数据同步,直接在数据信号中穿插⼀些同步⽤的信号位,或者把主体数据进⾏打包,以数据帧的格式传输数据某些通讯中需要双⽅约定数据的传输速率,以便更好地同步通讯速率⽐特率(Bitrate)每秒传输的⼆进制位数,单位bis/s波特率(Baudrate)每秒钟传输的码元通讯中常⽤时间间隔相同的符号来表⽰⼀个⼆进制数字,这样的信号称为码元常见波特率4800,9600,1152002、USART串⼝通讯协议层起始和停⽌信号串⼝通讯的⼀个数据包从起始信号开始,直到停⽌信号结束。
数据包的起始信号由⼀个逻辑 0 的数据位表⽰,⽽数据包的停⽌信号可由 0.5、1、1.5 或 2 个逻辑 1 的数据位表⽰,只要双⽅约定⼀致即可。
有效数据在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、6、7 或 8 位长数据校验在有效数据之后,有⼀个可选的数据校验位。
由于数据通信相对更容易受到外部⼲扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。
校验⽅法有奇校验 (odd)、偶校验(even)、0 校验(space)、1 校验(mark)以及⽆校验(noparity)。
stm32-串⼝实验遇到的问题
1.Printf函数不能在调试助⼿⾥正常打印?
前提是已经重定向了printf到串⼝,⽽且已经在option⾥勾上了use microlib,⼀切配置都毫⽆问题,在main.c⾥简单printf(“balabala”);却不能在调试助⼿⾥打印出来,点发送也只能发送在调试界⾯输⼊的内容;
2.解决⽅案
(1)将连接电脑的串⼝线,拔⼀下,再插⼀下,点击发送,打印就OK了;
(2)上⾯这种⽅法⽐较笨重,还有⼀种简单的⽅法:直接reset,就会直接答印了;
3.分析
实质上两种⽅法有根本的区别,读者⾃⾏实验判断;由于我是⽤串⼝烧写程序的,在烧写时会关闭调试助⼿的串⼝,等烧写完再打开调试助⼿的串⼝,在这段时间内,⼀条printf打印信息已经被发送完了,但根本没被调试助⼿接收到,所以只要reset⼀下,就会马上打印你想输出的信息了;
4.总结
⼀开始以为是调试助⼿的问题,到处下载其他的调试助⼿,实则结果都⼀样;然后再排查程序的问题(重定向),也没问题;再着查看配置的问题,⽐如引脚的配置,波特率的配置,也都没问题;最后偶然插拔了⼀下usb线就可以了解决问题了;再最后发现reset更为有效。
所以通过以上步骤可以发现,遇到问题,只要⼀⼀排查所有的可能性,最终是会发现答案的。
【STM32H7的DSP教程】第9章Matlab的串⼝通信实现第9章 Matlab的串⼝通信实现本章节主要为⼤家讲解Matlab的串⼝⽅式波形数据传输和后期数据分析功能,⾮常实⽤。
9.1 初学者重要提⽰9.2 程序设计框架9.3 下位机STM32H7程序设计9.4 上位机Matlab程序设计9.5 Matlab上位机程序运⾏9.6 实验例程说明(MDK)9.7 实验例程说明(IAR)9.8 总结9.1 初学者重要提⽰1、测试本章节例程注意事项。
请优先运⾏开发板,然后运⾏matlab。
调试matlab串⼝数据发送前,请务必关闭串⼝助⼿。
2、函数delete(instrfindall);如果不⽤matlab了,请在matlab的命令输⼊窗⼝调⽤此函数,防⽌matlab⼀直占⽤串⼝。
9.2 程序设计框架上位机和下位机的程序设计框架如下:上位机和下位机做了⼀个简单的同步,保证数据通信不出错。
9.3 下位机STM32H7程序设计STM32H7端的程序设计思路。
9.3.1 第1步,发送的数据格式为了⽅便数据发送,专门设计了⼀个数据格式:__packed typedef struct{uint16_t data1;uint16_t data2;uint16_t data3;uint8_t data4;uint8_t data5;uint8_t data6;uint8_t data7;}SENDPARAM_T;SENDPARAM_T g_SendData;9.3.2 第2步,接收同步信号$Matlab发送同步信号$(ASCII编码值是13)给开发板。
int main(void)/* 省略未写,仅留下关键代码 *//* 进⼊主程序循环体 */while (1){/* 判断定时器超时时间 */if (bsp_CheckTimer(0)){/* 每隔100ms 进来⼀次 */bsp_LedToggle(2);}if (comGetChar(COM1, &read)){/* 接收到同步帧'$'*/if(read == 13){bsp_LedToggle(4);bsp_DelayMS(10);Serial_sendDataMATLAB();}}}}通过函数comGetChar获取串⼝接收到的数据,如果数值是13,说明接收到Matlab发送过来的同步信号了。
STM32串口教程STM32是一种基于ARM Cortex-M内核的32位微控制器系列。
它具有强大的处理能力和丰富的外设接口,适用于各种嵌入式应用。
其中,串口通信是STM32常用的外设之一,可以用于和其他设备进行数据的收发。
本文将介绍STM32串口的配置和使用方法。
一、串口的基本原理串口是一种以串行方式传输数据的通信方式。
在串口通信中,数据按照比特位的顺序传输,一次传输一个位。
数据的传输包括一个或多个字节,每个字节由8位组成,其中包括1位起始位、1位停止位和可选的奇偶校验位。
串口通信需要两根信号线,一根用于发送数据(TX),一根用于接收数据(RX)。
二、STM32串口的配置配置串口的步骤如下:1.设置GPIO引脚功能和模式:将串口的引脚配置为复用功能,并设置引脚的模式为推挽输出。
2.使能串口时钟:根据串口的编号,使能对应串口的时钟。
3.配置串口参数:设置串口的波特率、数据位、停止位、奇偶校验位等参数。
4.使能串口:使能串口的发送和接收功能。
三、STM32串口的使用方法配置完成后,即可使用STM32的串口进行数据的收发。
下面是使用STM32串口的一般流程:1.发送数据:将要发送的数据写入到串口的发送缓冲区,等待数据发送完成。
2.接收数据:检测是否有数据接收到,如果有则读取数据。
在发送数据时,可以使用printf函数实现方便的格式化输出。
为了使用printf函数,需要先配置printf函数的底层接口。
可以使用标准库提供的函数重定向方法,将输出重定向到串口。
在接收数据时,可以使用中断方式或轮询方式。
中断方式需要配置串口的中断,并在中断服务函数中处理接收到的数据。
轮询方式是在主循环中不断检测数据是否接收到,并进行读取。
四、常见问题及解决方法1.串口通信乱码问题:可能是波特率设置不正确导致的,可以检查波特率设置是否和目标设备匹配。
2.串口接收数据丢失问题:可能是接收缓冲区溢出导致的,可以增加接收缓冲区的大小或者使用中断方式处理接收数据。
STM32串⼝接收、发送数据实验-程序代码分析串⼝通信实验Printf⽀持printf向串⼝发送⼀些字符串数据。
如果使⽤串⼝2,可以修改while((USART1->SR&0X40)==0);和USART1->DR = (u8) ch; 中的USART1为USART2.//加⼊以下代码,⽀持printf函数,⽽不需要选择use MicroLIB#if 1#pragma import(__use_no_semihosting)//解决HAL库使⽤时,某些情况可能报错的bugint _ttywrch(int ch){ch=ch;return ch;}//标准库需要的⽀持函数struct __FILE{int handle;/* Whatever you require here. If the only file you are using is *//* standard output using printf() for debugging, no file handling *//* is required. */};/* FILE is typedef’ d in stdio.h. */FILE __stdout;//定义_sys_exit()以避免使⽤半主机模式void _sys_exit(int x){x = x;}//重定义fputc函数int fputc(int ch, FILE *f){while((USART1->SR&0X40)==0);//循环发送,直到发送完毕USART1->DR = (u8) ch;return ch;}#endif实验现象从电脑串⼝助⼿发送长度为200以内任意长度的字符串给STM32串⼝1(字符串以回车换⾏标识结束),STM32接收到字符串之后,⼀次性通过串⼝1把所有数据返回给电脑。
实现过程把每个接收到的数据保存在⼀个程序定义的Buffer数组中(数组长度为200),同时把接收到的数据个数保存在定义的变量中。
STM32串口通信学习总结STM32是STMicroelectronics推出的一款32位单片机系列,具有高性能、低功耗、丰富的外设等特点,广泛应用于工业控制、消费电子、汽车电子等领域。
其中,串口通信是单片机中常用的通信方式之一,本文将对STM32串口通信学习进行总结。
1.串口通信原理及基础知识在STM32中,USART(通用同步/异步收发器)是负责串口通信的外设。
USART提供了多种模式的串口通信,包括异步模式(Asynchronous)、同步模式(Synchronous)以及单线模式(Single-wire)等。
2.STM32串口通信配置步骤(1)GPIO配置:首先需要配置串口通信所涉及的GPIO引脚,通常需要配置为复用功能,使其具备USART功能。
(2)USART配置:根据需要选择USART1、USART2、USART3等串口进行配置,设置通信模式、波特率等参数。
在配置时需要注意与外部设备的通信标准和参数保持一致。
(3)中断配置(可选):可以选择中断方式来实现串口数据的收发。
通过配置中断,当接收到数据时会触发中断,从而实现接收数据的功能。
(4)发送数据:通过USART的发送寄存器将数据发送出去,可以通过查询方式或者中断方式进行发送。
(5)接收数据:通过读取USART的接收寄存器,获取接收到的数据。
同样可以通过查询方式或者中断方式进行接收。
3.常见问题及解决方法(1)波特率设置错误:在进行串口通信时,波特率设置错误可能会导致通信失败。
需要根据外设的要求,选择适当的波特率设置,并在STM32中进行配置。
(2)数据丢失:在高速通信或大量数据传输时,由于接收速度跟不上发送速度,可能会导致数据丢失。
可以通过增加接收缓冲区大小、优化接收中断处理等方式来解决该问题。
(3)数据帧错误:在数据传输过程中,可能发生数据位错误、校验错误等问题。
可以通过对USART的配置进行检查,包括校验位、停止位、数据位等的设置是否正确。
3.9 OLED显示实验前面所有的介绍都没有涉及到液晶显示,从这一节开始,我们将陆续向大家介绍几款液晶显示模块。
本节我们将向大家介绍相对简单的OLED。
本节分为如下几个部分:3.9.1 OLED简介3.9.2 硬件设计3.9.3 软件设计3.9.4 下载与测试1463.9.1 OLED简介OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。
OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
LCD都需要背光,而OLED不需要,因为它是自发光的。
这样同样的显示,OLED效果要来得好一些。
OLED的尺寸难以大型化,但是分辨率确可以做到很高。
这一节,我们使用的是ALINETEK 的OLED显示模块,该模块有以下特点:1)模块有单色和双色两种可选,单色为纯白色,而双色则为黄蓝双色。
2)尺寸小,显示尺寸为0.96寸,而模块的尺寸仅为27mm*26mm大小。
3)高分辨率,该模块的分辨率为128*64。
4)多种接口方式,该模块提供了总共5种接口包括:6800、8080两种并行接口方式、3线或4线的穿行SPI接口方式,、IIC接口方式(只需要2根线就可以控制OLED了!)。
5)不需要高压,直接接3.3V就可以工作了。
这里要提醒大家的是,该模块不和5.0V接口兼容,所以请大家在使用的时候一定要小心,别接到5V的系统上去,否则可能烧坏模块。
以上5种模式通过模块的BS0~2设置,BS0~2的设置与模块接口模式的关系如下表:表3.9.1.1 OLED模块接口方式设置表上表中:“1”代表接VCC,而“0”代表接GND。
该模块的外观图如下:图3.9.1.1 ALIENTEK OLED模块外观图模块的原理图如下:图3.9.1.2 ALIENTEK OLED模块原理图该模块采用8*2的2.54排针与外部连接,其引线图如上图所示,总共有16个管脚,在16条线中,我们只用了15条,有一个是悬空的。