完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
1. 实验目的
使用485接口接收数据,然后返回接收的数据。 2. 实验步骤 USART_Configuration(); while(1){ //当接收到数据,发送数据} 2.1.USART_Configuration(); 开起时钟:IO口时钟、串口开时钟、[开启复用时钟、复用设置] 中断初始化: IO输入输出设置:485共有3个引脚,收发控制引脚(默认为收),收引脚,发引脚。 串口通信格式配置并初始化:主要是串口波特率等配置。 开启中断、串口。 //串口初始化 void USART_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; //串口和IO口使能 #ifdef USE_USART3 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); #endif RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE); //中断分组配置 组2 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; #ifdef USE_USART3 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_Init(&NVIC_InitStructure); #endif /*---------------------485控制引脚配置---------------------*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //注意这里的频率需要与对应串口的频率相一致 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //485A -- R/D1 -- 485A 的方向控制管脚 GPIO_InitStructure.GPIO_Pin = _485A_PIN; GPIO_Init(_485A_PORT, &GPIO_InitStructure); /*---------------------485输入输出配置---------------------*/ //串口3 输出 TX配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; #ifdef USE_485A GPIO_InitStructure.GPIO_Pin=USART3_TX_PIN; GPIO_Init(GPIOD,&GPIO_InitStructure); #endif /*---------------------串口输入配置---------------------*/ //串口3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; #ifdef USE_485A GPIO_InitStructure.GPIO_Pin=USART3_RX_PIN; GPIO_Init(GPIOD,&GPIO_InitStructure); #endif RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3,ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3,DISABLE); /*---------------------串口通信格式配置---------------------*/ USART_InitStructure.USART_BaudRate=USART_WordLength_8b; 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; #ifdef USE_USART3 USART_InitStructure.USART_BaudRate = USART3_BAUDRATE; USART_Init(USART3,&USART_InitStructure); USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); USART_Cmd(USART3, ENABLE); //初始化时,拉低485A、485B的相关引脚 GPIO_ResetBits(_485A_PORT, _485A_PIN); #endif } 2.2 while() USART_Configuration(); while(1) { LED_BLink(1000); if(buf_uart3.index>0) { send_string_uart3(buf_uart3.buf); clear_buf_uart3(); } } 3. 注意事项 1. 485线别错了,如果错了可能会乱码。 2. 库函数名字别写错, |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1810 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1631 浏览 1 评论
1098 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
737 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1687 浏览 2 评论
1947浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
751浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
584浏览 3评论
604浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
568浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 15:47 , Processed in 0.707363 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号