完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、题目要求
二、 串口协议和RS—232标准,RS232电平与TTL电平的区别,以及"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。 1、串口协议 什么是串口协议? 串口协议又指串口通信,串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。 设备之间的通信方式一般分为串行通信和并行通信。 按照通信方式,分为:同步通信和异步通信。 按照数据的传输方向,串口通信分为:单工、半双工、全双工。 常见串口通信接口: (一)STM32串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器)和USART(通用同步异步收发器),对于大容量STM32F10x系列芯片,分别有3个USART和2个UART。 UART有4个pin(VCC, GND, RX, TX), 用的TTL电平, 低电平为0(0V),高电平为1(3.3V或以上)。如下图: UART引脚连接方法: 芯片1的RxD连接芯片2的TXD,芯片2的RXD连接芯片1的TXD,GND接GND,然后这两个芯片之间就可以进行TTL电平通信了。 (二)RS-232 RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS-232采取不平衡传输方式,即所谓单端通讯。 虽然PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。 芯片串口和rs232的电平标准:Rs232的电平标准:+15/+13 V表示0,-15/-13表示1;单片机的电平标准(TTL电平):+5V表示1,0V表示0。 连接方式:在单片机串口与上位机给出的rs232口之间,通过电平转换电路,实现TTL电平与RS232电平之间的转换。 RS232接口: 通信过程中只有两个脚参与通信,所以在电路连接时,我们只需要连接三个脚即可。2脚:电脑的输入RXD,3脚:电脑的输出TXD 通过2 ,3 脚就可以实现全双工(可同时收发)的串行异步通信,5脚:接地。 PC串口与单片机串口连接方式: 其中,DB91是在电脑上的 DB92是在单片机实验板上焊接着的。如果电脑没有rs232口,只有USB口,可以用串口转接线转出串口,在电脑上位机上需要安装驱动程序。 (三)TTL电平与RS—232电平的区别 TTL电平标准:输出 L: 《0.8V ; H:》2.4V;输入 L: 《1.2V ; H:》2.0V。TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。于是TTL电平的输入低电平的噪声容限就只有(0.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V。 。比TTL有更高的噪声容限。 RS232标准:逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次。 TTL232:晶体管-晶体管逻辑集成电路。 RS232:数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准。 TTL:是以某个固定的速率去传输的,但是可以传输多个bit比特位。 RS232:以固定的某个速率(1200bps,9600bps,115200bps等),一次只能只传输一个bit比特位。 (四)USB/TTL转232(以CH340为例) USB转串口模块可以使用5V、3V3电压供电,需要将跳线帽进行安装。可以对USB转串口模块进行测试,将USB的电压引脚用跳帽接上,然后将RXD和TXD两个引脚用跳帽或者杜邦线接上。然后打开串口终端,点击“手动发送”或者“自动发送”,如果在接收区可以接收到数据,说明USB转串口模块工作正常,否则需要检查接线是否正确、电路板元器件是否损坏。 VCC接线是为了单片机供电,USB转串口的RXD引脚与单片机的TXD引脚相连,USB转串口的TXD引脚与单片机的RXD引脚相连,两者的GND引脚直接相连,如下图: 2、stm32的USART的串口通信(查询方式) (一)内容 完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求: 1)设置波特率为115200,1位停止位,无校验位; 2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。 3)在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察串口输出波形,并分析其波形反映的时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。 (二)安装CH340驱动 安装已完成 在电脑设备管理器处查看有无com端口出现,有即可证明成功。 (三)代码建立工程 只需要修改下usart.c和test.c文件即可。 在SYSTEM组下双击usart.c,其中的uart_init函数,代码如下: void uart_init(u32 pclk2,u32 bound) { float temp; u16 mantissa; u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV mantissa=temp; //得到整数部分 fraction=(temp-mantissa)*16; //得到小数部分 mantissa<<=4; mantissa+=fraction; RCC->APB2ENR|=1<<2; //使能PORTA口时钟 RCC->APB2ENR|=1<<14; //使能串口时钟 GPIOA->CRH&=0XFFFFF00F;//IO状态设置 GPIOA->CRH|=0X000008B0;//IO状态设置 RCC->APB2RSTR|=1<<14; //复位串口1 RCC->APB2RSTR&=~(1<<14);//停止复位 //波特率设置 USART1->BRR=mantissa; // 波特率设置 USART1->CR1|=0X200C; //1位停止,无校验位. #if EN_USART1_RX //如果使能了接收 //使能接收中断 USART1->CR1|=1<<5; //接收缓冲区非空中断使能 MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级 #endif } 在test.c中编写如下代码: #include "sys.h" #include "usart.h" #include "delay.h" int main(void) { u16 t; u16 len; u16 times=0; Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,115200); //串口初始化为115200 while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3FFF;//得到此次接收到的数据长度 printf("rn Hello Windows! rnrn"); for(t=0;t { USART1->DR=USART_RX_BUF[t]; while((USART1->SR&0X40)==0);//等待发送结束 } printf("rnrn");//插入换行 USART_RX_STA=0; }else { times++; if(times%200==0)printf("Hello Windows!rn"); delay_ms(10); } } } 编译成功后烧录: (四)串口助手观察输出 打开XCOM串口助手,弹出界面点击打开串口,即可以接收到C8T6发送的数据Hello Windows! 3、KEIL观察串口输出的波形 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 用此功能观察串口输出波形,并分析其波形反映的时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。 我们可以看出PA9、PA10波形是一条直线,没有变化。 三、stm32CubeMX+Keil使用HAL库点灯,并使用逻辑分析仪观察周期 1、stm32CubeMX点亮LED灯 (一)内容 安装 stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库这两种方式,完成下列任务: 1、重做上一个LED流水灯作业,即用GPIO端口完成3只LED红绿灯的周期闪烁。 2、在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察3个GPIO端口的输出波形,并分析其波形反映的时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。 (二)准备工作 安装完成之后,点击help,下载依赖包 选择自己的芯片,选上前面的复选框就可以下载了,前面是绿色就代表已经下载好了。 包下载好之后就可以了,后面回到home界面,创建新项目。在part name那输入自己的芯片,这里以STMC8T6举例,然后在中间回出现一列信息,点击之后再点击start project就行了。 点击System Core,进入里面的SYS,在debug那里选择Serial Wire。 接下来就是配置时钟了,进入上面的rcc,有两个时钟,一个是hse和lse,我们要用是GPIO接口,而这些接口都在APB2里。 接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上。 所以我们将hse那里设为Crystal/Ceramic Resonator就行了。 接下来就是点击相应的引脚设置输出寄存器了,就是output那一项,一共选了三个,是PA7,PB9,PC15。设置还没完,点击System core里的GPIO,把点击引脚名,把输出等级改为high,其实这里不改也没什么,只是程序运行开始时初始状态不一样,mode不用改 点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM。 进入code generate界面,选择生成初始化.c/.h文件,后面点击generate code就行了。 (三)stm32CubeMX生成代码 进入对应文件夹,再打开MDK-ARM文件夹,通过keil打开刚刚生成的项目。 通过这个目录打开main.c文件,到主函数那一部分。 将下面代码放入主函数中(替代里面的内容)。 SystemClock_Config();//系统时钟初始化 MX_GPIO_Init();//gpio初始化 while (1) { HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯 HAL_Delay(500);//延时0.5s HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯 HAL_Delay(500);//延时0.5s HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯 HAL_Delay(500);//延时0.5s HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯 HAL_Delay(500);//延时0.5s HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯 HAL_Delay(500);//延时0.5s HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯 HAL_Delay(500);//延时0.5s } (四)编译、烧录 烧录 (五)结果 2、keil观察3个GPIO端口的输出波形 (一)仿真模式的设置 在使用仿真模式时,需要进行Debug模式设置,下图是Debug设置模式。 (二)逻辑分析仪 设置完成后,开启调试模式,打开逻辑分析仪。 直接以 PORTX 的形式输入,内容取决于代码中定义的管脚。 我们需要将Display Type处设置为Bit。 得到波形图: 四、实验总结 通过这次实验我们了解了什么是串口协议,串口协议和RS—232标准,RS232电平与TTL电平的区别。以及如何用使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,在实验也遇到了很多的问题,但是经过网上查找资料,以及同学的帮助,完成了这次实验,还是挺有收获的,明白了要将理论运用到实践,这样也提高了我们的动手能力,也让我们学到更多的新知识。 |
|
|
|
只有小组成员才能发言,加入小组>>
3320 浏览 9 评论
3000 浏览 16 评论
3496 浏览 1 评论
9069 浏览 16 评论
4089 浏览 18 评论
1190浏览 3评论
612浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
602浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2339浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 05:52 , Processed in 1.314465 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号