用示波器测试了一下,发现串口到RS485之前有波形,RS485之后也有波形。。。就是CC2530收不到信号。。发现进不去那个接收中断。。。。求解。。。
Ken Wang:
Hi guang,
你在IAR的属性设置里面有没有设置HAL_UART= TRUE(Defined symbols 选项). 如果没有的话,UART模块就不会使能,从而用不了UART模块。
谢谢
ken
guang zhang:
回复 Ken Wang:
用了还是不行。就是不用协议栈也不行。。。难道是我的电路图有问题???帮我看看rs485有问题吗?
guang zhang:
回复 Ken Wang:
设置了还是不行。。。。是不是我的rs485电路有问题。。。你帮我看一下吧
lihua jia:
抛开485电路,直接串口TX接CC2530的P0.2试试呢?接收中断是否开启?应该加上IEN0 |= (1<<2);
lihua jia:
我也遇到跟楼主类似的问题了。原本只是用了USB转TTL的转换器接收发送数据都没问题。后来硬件加了TTL转485的接口,用P0.1作为485的使能控制,P0.4和P1.0作为指示灯,修改了Hal文件的设置后,USART只能接收不能发送;奇怪的是如果把LED的宏定义也设置成P0.1,就变成只能发送不能接收了。
请高手指点问题出在哪里?485原理图如下,很简单的接法
lihua jia:
回复 lihua jia:
问题解决了,原因可能是DMA发送有一个响应时间,我调用HalUARTWrite函数之前将DC_485置高,调用完立刻置低,这时候DMA还没有发送完成,从示波器上可以看出发送的波形时间比DC_485的高电平时间长。后来尝试在拉低DC_485之前加延时,想尽量等DMA操作完成,还是不成功。
最终的解决方法是在DMA的发送完成中断函数的最后才将DC_485拉低,485就可以正常发送和接收了
guang zhang:
回复 lihua jia:
能不能说的再详细一些 我还是没有解决呢
lihua jia:
回复 guang zhang:
MT_UartInit(); //串口初始化
MT_UartRegisterTaskID(task_id); //登记任务号
IEN0 |= (1<<2); //使能USART0 RX
然后就可以进 HAL_ISR_FUNCTION( halUSART0Isr, URX0_VECTOR )了
你的485使能控制正常吗?在空闲状态时是低电平吗
guang zhang:
回复 lihua jia:
我用协议栈不行,不用协议栈自己编程序还是不行。。。一上电就是高电平啊。。。
lihua jia:
回复 guang zhang:
发送之前将485控制引脚设为高电平,发送完之后再设成低电平啊,要不485芯片一直处于发送使能状态,肯定不能接收的
TI中文支持网
