使用DSP28035和NSI83085完成485通讯

首先是原理图,原理图如下图:

其中引脚对应关系为:

34—SCITXDA    40—SCIRXDA    5 —GPIO42

NSI83085芯片为半双工隔离485收发器,不能同时进行接收和发送。

需要一个RE/DE来进行片选

GPIO42为高电平时,发送使能

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
由于您提供的信息太少,我无法为您提供完整的程序。但是,我可以为您提供一些思路和代码片段,帮助您开始编写程序。 首先,您需要配置STM32H743的UART外设,以使其能够与NSI83085进行通信。以下是一个简单的初始化函数的示例: ```c void UART_Init(void) { // 使能UART时钟 RCC->APB1LENR |= RCC_APB1LENR_USART3EN; // 配置UART引脚 GPIOA->AFR[0] |= (7<<24) | (7<<28); // AF7 for PA9 and PA10 GPIOA->MODER &= ~(3<<18); GPIOA->MODER |= (2<<18); // PA9 as TX and PA10 as RX // 配置UART参数 USART3->BRR = 48000000/115200; // 波特率为 115200 USART3->CR1 |= USART_CR1_TE | USART_CR1_RE | USART_CR1_UE; // 使能发送和接收 } ``` 然后,您需要实现一个函数,用于发送和接收数据。以下是一个简单的函数示例: ```c void UART_SendReceive(uint8_t* tx_data, uint8_t* rx_data, uint16_t size) { // 发送数据 while(size--) { while(!(USART3->ISR & USART_ISR_TXE)); USART3->TDR = *tx_data++; } // 接收数据 while(size--) { while(!(USART3->ISR & USART_ISR_RXNE)); *rx_data++ = USART3->RDR; } } ``` 最后,您需要编写代码来处理NSI83085的请求和响应。您可以使用中断机制来实现这一点。以下是一个简单的中断处理函数的示例: ```c void USART3_IRQHandler(void) { if(USART3->ISR & USART_ISR_RXNE) { // 处理接收到的数据 uint8_t data = USART3->RDR; // ... } if(USART3->ISR & USART_ISR_TXE) { // 发送下一个数据 if(tx_size) { USART3->TDR = *tx_data++; tx_size--; } else { USART3->CR1 &= ~USART_CR1_TXEIE; } } } ``` 需要注意的是,这个实现需要考虑到多个主机的同步和并发性。您需要仔细设计和测试您的实现,以确保它可以满足您的需求并正确地处理所有可能的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值