完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
数据通过485总线发送到485转TTL模块(485转串口),STM32单片机接受,但无法接受到数据,不知道是什么原因?两边的波特相同,使用USB转ttl接受485转TTL的数据,完全可以显示!求大神指教
下面是代码: u8 RS485_RX_BUF[64]; u8 RS485_RX_CNT=0; void RS485_Init(u32 bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜGPIOAʱÖÓ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE) ; //ʹÄÜUSART2ʱÖÓ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍì GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG; //¸¡¿ÕÊäÈë GPIO_Init(GPIOA, &GPIO_InitStructure); RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);//¸´Î»´®¿Ú2 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);//Í£Ö¹¸´Î» USART_InitStructure.USART_BaudRate = bound;//²¨ÌØÂÊÉèÖà USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8λÊý¾Ý³¤¶È 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; USART_Init(USART2, &USART_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); USART_Cmd(USART2, ENABLE); } void USART2_IRQHandler(void) { u8 res; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { res =USART_ReceiveData(USART2); USART_ClearITPendingBit(USART2,USART_IT_RXNE); if(RS485_RX_CNT<64) { RS485_RX_BUF[RS485_RX_CNT]=res; RS485_RX_CNT++; } } } void RS485_Receive_Data(u8 *buf) { u8 i; delay_ms(10); if(RS485_RX_CNT) { for(i=0;i buf=RS485_RX_BUF; } RS485_RX_CNT=0; } } void BEEP_485(void) { u8 re***uf[5] ,i ; RS485_Receive_Data(re***uf); for(i=0;i<5;i++) { printf("res:%drn",re***uf); if(re***uf=='1') { BEEP=1; delay_ms(5000); BEEP=0; } } } 主循环一直运行BEEP_485(); 发送端以字符串的形式每次发送5个1; |
|
相关推荐
2个回答
|
|
就没有大神么?
|
|
|
|
RS485有一根使能线,拉低的时候接收,拉高的时候发送,我没看见你定义这个使能端
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
969 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
954 浏览 2 评论
2066 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1162 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1587 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 12:56 , Processed in 0.488948 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号