用示波器测试了一下,发现串口到RS485之前有波形,RS485之后也有波形。。。就是CC2530收不到信号。。发现进不去那个接收中断。。。。求解。。。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
用示波器测试了一下,发现串口到RS485之前有波形,RS485之后也有波形。。。就是CC2530收不到信号。。发现进不去那个接收中断。。。。求解。。。
MT_UartInit(); //串口初始化
MT_UartRegisterTaskID(task_id); //登记任务号
IEN0 |= (1<<2); //使能USART0 RX
然后就可以进 HAL_ISR_FUNCTION( halUSART0Isr, URX0_VECTOR )了
你的485使能控制正常吗?在空闲状态时是低电平吗
我用协议栈不行,不用协议栈自己编程序还是不行。。。一上电就是高电平啊。。。
发送之前将485控制引脚设为高电平,发送完之后再设成低电平啊,要不485芯片一直处于发送使能状态,肯定不能接收的
对呀 就是那样设置的呀 还是不行啊 接收的那个中断都进不去。。。。费解 可是用示波器看是有数据的
能不能留个联系方式啊 我的问题还没有解决 希望你能帮我看看 多谢了 依然是无法接收数据只能发送数据
zigbee用串口发送数据给rs485的超声波探头该怎么做呀
我直接 用uart0 tx rx gnd接rs485转换器
我发现接上收不到数据
先调用协议栈函数HalUARTInit(void)初始化
然后控制485的方向引脚,使其处于发送或接收模式
下面是发送函数,
嗯,我也这样测试过,也没能成功。总是在数据还没发送完成时就拉低了485控制引脚。我当时测试的问题波形在下面的链接里http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/72525.aspx
后来我把串口改成了中断方式,在串口中断函数里处理485的控制引脚就可以了。
我认为在DMA的中断里处理不成功的原因是:DMA发送完成的中断并不代表UART已经发送完成,DMA中断发生后最后的串口数据可能还没发送。
485通讯还需要一个控制引脚,可参照下面链接里的原理图
http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/72525.aspx
提供一点参考意见:
1、我用的协议栈是2.5.1a版本,你的是更早的一个版本
2、你说在发送之前就会执行控制引脚拉低,可以设置断点仿真看是控制引脚变化先执行还是发送动作先执行
我觉得有可能你的DMA触发中断的方式设置的不一样。以下函数 if (HAL_DMA_CHECK_IRQ(HAL_DMA_CH_TX))这一句
是设置触发DMA中断方式的,协议栈里是选了DMA通道2。
DMA通道跟外设也是有对应关系的,我用的UART0,你可以具体查查是不是DMA通道没对应好。
/******************************************************************************
* @fn HalDMAInit
*
* @brief DMA Interrupt Service Routine
*
* @param None
*
* @return None
*****************************************************************************/
HAL_ISR_FUNCTION( halDmaIsr, DMA_VECTOR )
{
extern void HalUARTIsrDMA(void);
HAL_ENTER_ISR();
DMAIF = 0;
#if HAL_UART_DMA
if (HAL_DMA_CHECK_IRQ(HAL_DMA_CH_TX))
{
HalUARTIsrDMA();
}
我觉得可能是协议栈版本的问题
1.执行的顺序是没问题的,发送单个数据时看起来是先执行了引脚拉低操作;但发送多个数据时是发送一些数据后才进行的引脚拉低操作,由此可以看出执行顺序没问题。
a.发送单个数据时波形
b.发送多个数据时波形
2.怀疑是协议栈版本的问题的另一个原因,是对比了2.5.1a版本中HAL_ISR_FUNCTION( halDmaIsr, DMA_VECTOR )这个函数和我的这个版本中该函数的区别,发现函数的开头少了
HAL_ENTER_ISR()
函数的末尾少了
CLEAR_SLEEP_MODE();
HAL_EXIT_ISR();
有时间我升级一下协议栈试试,多谢 lihua jia ~
你好,请问下使用中断方式的话,你说在终端函数里面处理,能具体点吗?具体是的这个中断函数是在哪里能指导下吗?并且我是使用串口1进行跟485通讯的,那是否需要在初始化的时候进行串口1的中断使能之类的,谢谢了