当前位置: 首页 > wzjs >正文

阜阳网站建设专业机构有哪些好的ps素材网站

阜阳网站建设专业机构,有哪些好的ps素材网站,中国建设部官方网站资格证查询,制作企业官网目录 一、硬件配置 1、RCC、DEBUG、CodeGenerator 2、USART3 3、 RS485_DIR 4、NVIC 二、软件设计 1、RS485的收发控制 2、main.c 三、运行调试 1、修改RS485_DIR为SET后需要延迟 2、向串口助手发送的数据不能太长 MCU上的串口UART(USART)是…

目录

一、硬件配置

1、RCC、DEBUG、CodeGenerator

2、USART3

3、 RS485_DIR

4、NVIC 

二、软件设计

1、RS485的收发控制

2、main.c

三、运行调试

1、修改RS485_DIR为SET后需要延迟

2、向串口助手发送的数据不能太长


        MCU上的串口UART(USART)是逻辑电平(TTL或CMOS电平),在开发板上实现与串口助手之间的RS485通信,就是把单片机上的逻辑电平通过RS485物理层芯片转换为RS485电平。

        本文继续使用旺宝红龙开发板STM32F407ZGT6 KIT V1.0。本文的目的是通过MAX485物理层芯片把开发板上的USART3(PB10、PB11)逻辑电平转换为RS485电平,然后通过一条USB转RS485的转换线连接到串口助手上。原理图如下:

        P18的管脚A+连接USB转RS485的线的T/R+,P18的管脚A-连接USB转RS485的线的T/R-。

        在串口助手上识别出识别出该线的驱动,选择并设置波特率,通过几次调试可以选择到不失真时的最大波特率,其它参数可以默认。串口助手的波特率与MCU里配置USART3时选择的波特率要一致。

一、硬件配置

1、RCC、DEBUG、CodeGenerator

  • RCC:外部晶振25MHz,HCLK=168MHz,PCLK1=42MHz,PCLK2=84MHz;
  • DEBUG:Serial Wire;
  • CodeGenerator:勾选☑Generate peripheral initialization as a pair of '.c/.h' files per peripheral

2、USART3

        配置PB10、PB11为USART3,波特率9600,其它参数默认;

        本文作者测试到波特率14400,不失真,15200失真。

3、 RS485_DIR

        RS485是半双工通信的,因此有方向控制,设置PF7为RS485_DIR,默认为高电平。

4、NVIC 

        把Times base的中断优先级修改为0。USART3的全局中断可以设置为优先级1。如果不需要也可以不选择。

二、软件设计

        实例程序很短,只是为了演示RS485的收发控制。

1、RS485的收发控制

         每次向串口助手发送前,要先把RS485_DIR置位。

  //修改RS485为发送HAL_GPIO_WritePin(RS485_DIR_GPIO_Port, RS485_DIR_Pin, GPIO_PIN_SET);

        每次接收数据前要先把RS485_DIR复位。

//默认RS485为接收状态
HAL_GPIO_WritePin(RS485_DIR_GPIO_Port, RS485_DIR_Pin, GPIO_PIN_RESET);

2、main.c

/* USER CODE BEGIN Includes */
#include <stdio.h>
uint8_t rxbuf[8];
uint8_t ackbuf[]="123\r\n";
/* USER CODE END Includes */
/* USER CODE BEGIN 2 *///默认RS485为发送状态uint8_t txbuf1[]="Hello,world!\r\n";HAL_UART_Transmit(&huart3,txbuf1,sizeof(txbuf1),1000);HAL_Delay(500);HAL_UART_Transmit(&huart3,txbuf1,sizeof(txbuf1),1000);HAL_Delay(500);uint8_t txbuf2[]="TEST RS485!\r\n";HAL_UART_Transmit(&huart3,txbuf2,sizeof(txbuf2),1000);HAL_Delay(500);HAL_UART_Transmit(&huart3,ackbuf,sizeof(ackbuf),1000);HAL_Delay(500);//修改RS485为接收HAL_GPIO_WritePin(RS485_DIR_GPIO_Port, RS485_DIR_Pin, GPIO_PIN_RESET);//485改为接收后,不能发送HAL_UART_Transmit(&huart3,ackbuf,sizeof(ackbuf),1000);HAL_Delay(500);//修改RS485为发送HAL_GPIO_WritePin(RS485_DIR_GPIO_Port, RS485_DIR_Pin, GPIO_PIN_SET);//没有适当的延迟,则乱码HAL_Delay(200);	//切换测试,注释掉,以观察乱码uint8_t txbuf3[]="can transmit again.\r\n";HAL_UART_Transmit(&huart3,txbuf3,sizeof(txbuf3),1000);HAL_Delay(500);HAL_UART_Transmit(&huart3,ackbuf,sizeof(ackbuf),1000);HAL_Delay(500);HAL_UART_Transmit(&huart3,txbuf1,sizeof(txbuf1),1000);HAL_Delay(500);//修改为小于16字节后,乱码消失.uint8_t txbuf4[]="transmit again.\r\n";HAL_UART_Transmit(&huart3,txbuf4,sizeof(txbuf4),1000);HAL_Delay(500);/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
while (1)
{/* USER CODE END WHILE *//* USER CODE BEGIN 3 *//* 如果MCU接收到数据,则执行发送任务,发送前修改485为发送*/if(HAL_UART_Receive(&huart3,rxbuf,sizeof(rxbuf),1000) == HAL_OK){/*设置485为发送*/HAL_GPIO_WritePin(RS485_DIR_GPIO_Port, RS485_DIR_Pin, GPIO_PIN_SET);//修改RS485收发控制后要有延迟,否则,立刻发送的数据会有乱码HAL_UART_Transmit(&huart3,ackbuf,sizeof(ackbuf),1000);printf("\r\n");HAL_Delay(200);printf("修改RS485_DIR后要有延迟,");printf("否则,立刻发送的数据会有乱码.\r\n");HAL_Delay(500);	//这是必需,否则会乱码HAL_UART_Transmit(&huart3,ackbuf,sizeof(ackbuf),1000);HAL_Delay(500);char str[8];sprintf(str,"%s",ackbuf);printf("test:%s\r\n",str);HAL_Delay(500);uint8_t txbuf6[]="RS485发送的数据:";HAL_UART_Transmit(&huart3,txbuf6,sizeof(txbuf6),1000);//printf("RS485发送的数据:");HAL_Delay(500);HAL_UART_Transmit(&huart3,rxbuf,sizeof(rxbuf),1000);HAL_Delay(500);printf("\r\n");HAL_Delay(200);uint8_t txbuf7[]="\r\n";HAL_UART_Transmit(&huart3,txbuf7,sizeof(txbuf7),1000);HAL_Delay(200);}/默认RS485为接收状态HAL_GPIO_WritePin(RS485_DIR_GPIO_Port, RS485_DIR_Pin, GPIO_PIN_RESET);
}
/* USER CODE END 3 */
/* USER CODE BEGIN 4 */
//串口打印
int __io_putchar(int ch)
{HAL_UART_Transmit(&huart3,(uint8_t*)&ch,1,0xFFFF);return ch;
}
/* USER CODE END 4 */

三、运行调试

        重要的调试发现,在调试RS485通讯时,发现串口助手上显示乱码,最终找到2个原因:

1、修改RS485_DIR为SET后需要延迟

        每次HAL_GPIO_WritePin(RS485_DIR_GPIO_Port, RS485_DIR_Pin, GPIO_PIN_SET)后应该适当地延迟,不然,显示到串口助手上的数据乱码。

2、向串口助手发送的数据不能太长

        向串口助手上发送的数据不能太长,不然,也会乱码。具体达到多长的数据才开始乱码,要测试后确定。过长的数据可以分批次传送,printf()函数更适合发送长的数据,也适合发送和显示有换行要求的数据;


文章转载自:

http://SbIhQNrP.bLqsr.cn
http://pzfCoyhU.bLqsr.cn
http://SJxl68ah.bLqsr.cn
http://wrg0kiQe.bLqsr.cn
http://MnHWDDhq.bLqsr.cn
http://0zMi3TFt.bLqsr.cn
http://vluCVpas.bLqsr.cn
http://JBhEgaU2.bLqsr.cn
http://TDHY0lpL.bLqsr.cn
http://yX85fjGU.bLqsr.cn
http://FDTzPGci.bLqsr.cn
http://h669ay1u.bLqsr.cn
http://Jo7zJBQr.bLqsr.cn
http://2YZPtVTQ.bLqsr.cn
http://W42XTK6f.bLqsr.cn
http://eHGsStAx.bLqsr.cn
http://95wAL5rs.bLqsr.cn
http://sA62YsVn.bLqsr.cn
http://goBT5zqj.bLqsr.cn
http://pJ1J2zCQ.bLqsr.cn
http://is7nSri2.bLqsr.cn
http://jA6XeM8r.bLqsr.cn
http://LJzai3t8.bLqsr.cn
http://qth3IymV.bLqsr.cn
http://rHyTHCyq.bLqsr.cn
http://6HFACwMX.bLqsr.cn
http://zEwPMeen.bLqsr.cn
http://6al0sJr5.bLqsr.cn
http://78qSqEXb.bLqsr.cn
http://fZVbkKFp.bLqsr.cn
http://www.dtcms.com/wzjs/684777.html

相关文章:

  • 企业网站名是什么意思制作网站专业公司吗
  • 网站建设维护教程国外网站查询
  • 给个人网站做百度百科网站运营总监
  • 响应式网站效果图做多大的免费下载软件大厅
  • 物流网站开发项目书django wordpress
  • 长沙鞋网站建设团队网站源码
  • 哈尔滨哪里做网站wordpress linux下载
  • seo查询 站长工具网站建设应重视后期的服务和维护
  • 北京建设工程交易服务中心网站seo推广优化服务
  • 网站搭建一般要山东省建设安全监督站的网站
  • 靓号网站开发网站建设公司厂
  • 秦皇岛抚宁区建设局网站wordpress 用户组
  • 响应式建设网站杭州做宠物网站的公司哪家好
  • 和建设银行类似的网站折800网站程序
  • 鞍山手机网站建设汽车门户网站建设
  • 网站优化+山东西安做网站公司那家好
  • 有没有在线做动图的网站游戏开发引擎
  • 做短视频网站全球新闻最新消息
  • 怎么整理网站龙岩有什么招聘本地网站
  • 制作公司网站应该考虑什么广州网站排名优化公司
  • 网站脑图怎么做盐城哪有做网站建设的
  • 国外的设计网站app吗西安网站设计师
  • 上海建智咨询培训网站网站什么时候备案
  • 美食网站设计的代码郑州专业网站建设公司
  • 查网站备案网络营销的未来6个发展趋势
  • 重庆网站建设百度推广wordpress 评论回复邮件通知插件
  • 网站开发一般需要多久青岛响应式网站开发
  • 黑河网站制作忘记密码wordpress
  • 我要做个网站建设路街道办事处门户网站
  • 网站备案在哪里审批项目从立项到施工的程序