为什么485芯片红外发送芯片使能导致红外发送芯片丢包

更多最新文章相关作者文章搜狗:感谢您阅读利用单片机实现对云台的控制 本文版权归原作者所有,本文由网友投递产生,如有侵权请联系 ,会第一时间为您处理删除。博客访问: 860148
博文数量: 299
博客积分: 3251
博客等级: 中校
技术积分: 2986
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 嵌入式
总线是一种常规的通信总线,它不能够做总线的自动仲裁,也就是不能够同时发送数据以避免总线竞争,所以整个系统的通信效率必然较低,数据冗余量较大,对于速度要求高的应用场所不适应用总线。同时由于总线上通常只有一台主机,所以这种总线方式是典型的集中分散型控制系统。一旦主机出现故障,会使整个系统的通信限于瘫痪状态,因此做好主机的在线备份是一个重要措施。
传统光电隔离的典型电路:
与()是两组不共地的电源,一般用隔离型的来实现。通过光耦隔离来实现信号的隔离传输,与系统不共地,完全隔离则有效的抑制了高共模电压的产生,大大降低的损坏率,提高了系统稳定性。但也存在电路体积过大、电路繁琐、分立器件过多,传输速率受光电器件限制等缺点,对整个系统的稳定性也有一定影响。
串口接收端
串口传输端
为控制位:控制发送还是接收数据;
当(高电平时),光耦电路截止,无效,有效,即发送数据;
当低电平时,光耦电路导通,有效,即接收数据,无效;
第一步,配置好串口发送、接收端引脚和控制引脚;
因为引脚相对于芯片来说是接收外来数据,所以设置为输入;
引脚相对于芯片来说是对外发送数据,所以设置为输出;
引脚是对外发送“”或“”高低电平命令,所以设置为输出;
/*****************************************************************&&
*函数名称:&&UART2Init&&
*功能描述:&&对串口2参数进行设置、485控制端口初始化&&
*输入参数:无&&
*返&回&值:无&&
*其他说明:无&&
*当前版本:v1.0&&
*作&&&&者:&尹宣&&
*完成日期:日&&
*修改日期&&&&&&版本号&&&&&&修改人&&&&&&修改内容&&
*-----------------------------------------------------------------&&
******************************************************************/&&
void&UART2Init(void)&&
&&&&&&&&GPIO_InitTypeDef&GPIO_InitS&&
&&&&&&&&USART_InitTypeDef&USART_InitS&&
&&&&&&&&RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,&ENABLE);&&
&&&&&&&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,&ENABLE);&&
&&&&&&&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,&ENABLE);&&
&&&&&&&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,&ENABLE);//使能外设时钟&&&&&&
&&&&&&&&//GPIO结构的成员设置如下:&&
&&&&&&&&&/*--------------485控制端初始化------PA1----------*/&&
&&&&&&&&&GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_1&;&&
&&&&&&&&GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_50MHz;&//50M时钟速度&&
&&&&&&&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_Out_PP;&//推挽输出&&
&&&&&&&&GPIO_Init(GPIOA,&&GPIO_InitStructure);&&
&&&&&&&&&&
&&&&&&&&GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_2;&&&&&&&&&&//485_TX&&
&&&&&&&&GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_50MHz;&&&
&&&&&&&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_AF_PP;&&//复用推挽输出&&
&&&&&&&&GPIO_Init(GPIOA,&&GPIO_InitStructure);&&
&&&&&&&&GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_3;&&&&&&&&&&&//485_RX&&
&&&&&&&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_IN_FLOATING;&//浮空输入&&
&&&&&&&&GPIO_Init(GPIOA,&&GPIO_InitStructure);&&
&&&&&&&&//串口的结构成员设置如下:&&
&&&&&&&&USART_InitStructure.USART_BaudRate&=&9600;&&&&&&&&&&&
&&&&&&&&USART_InitStructure.USART_WordLength&=&USART_WordLength_8b;&&
&&&&&&&&USART_InitStructure.USART_StopBits&=&USART_StopBits_1;&&
&&&&&&&&USART_InitStructure.USART_Parity&=&USART_Parity_No;&&
&&&&&&&&USART_InitStructure.USART_HardwareFlowControl&=&USART_HardwareFlowControl_N&&
&&&&&&&&USART_InitStructure.USART_Mode&=&USART_Mode_Tx&|&USART_Mode_Rx;&&
&&&&&&&&USART_Init(USART2,&&USART_InitStructure);&&
&&&&&&&&USART_Cmd(USART2,&ENABLE);&&
&&&&&&&&/*方法一:&清发送完成标志*/&&
&&&&&&//&&USART_ClearFlag(USART3,&USART_FLAG_TC);&&&
&&&&&&&&&&
&&&&&&&/*方法二:获取串口1状态标志位*/&&
&&&&&&&USART_GetITStatus(USART1,&USART_FLAG_TC);&&
第二步:发送数据
这里需要注意的是:
的小缺陷:串口配置好,如果直接,则第个字节发送不出去
如下两个方法语句解决第个字节无法正确发送出去的问题
清发送完成标志,
获取串口状态标志位
刚上电时出现乱码的原因:
检测发送数据寄存器空标志位
如果发送完成标志位
当设为检测发送数据寄存器空标志位为空,但是发送移位寄存器不为空,数据还没有完全的发送出去,又有数据就被写进来了,所以就会容易出现乱码;
当设为检测发送完成标志位为空,即发送移位寄存器为空,数据才真正的发送出去,因此此时又有数据被写进来也不会发生乱码
的数据发送有两个中断标志,一个是发送数据寄存器空标志,一个是发送完毕标志。两个标志都可以引起中断
要以中断的方式发送一个数据包,流程是这样的:
设置的方向为发送,使能发送寄存器空中断,使能完毕进入串口中断。
串口中断里读取串口状态,并填充一个数据到发送数据寄存器硬件自动清除发送数据寄存器空标志串口数据发送开始。
串口发送完一个数据,发送数据寄存器变空,再进入中断,继续填充下一个数据,直到最后一个数据填充完使能串口
发送完毕中断。
最后一个数据发送完毕再次进入中断清除发送数据寄存器空标志,清除发送完毕中断标志,清除这两个中断标志
的使能位,设置的方向为接收
/*****************************************************************&&
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&宏定义&&
******************************************************************/&&
#define&RX_485&&GPIO_SetBits(GPIOA,GPIO_Pin_1);&&
#define&TX_485&&GPIO_ResetBits(GPIOA,GPIO_Pin_1);&&
/*****************************************************************&&
*函数名称:&&UART2_TX485_Puts&&
*功能描述:&&发送字符串数据&&
*输入参数:str:要发送的字符串&&
*返回值:无&&
*其他说明:无&&
*当前版本:v1.0&&
*作&&&&者:&梁尹宣&&
*完成日期:日&&
*修改日期&&&&&&版本号&&&&&&修改人&&&&&&修改内容&&
*-----------------------------------------------------------------&&
******************************************************************/&&
void&UART2_TX485_Puts(char&*&str)&&
&&&&while(*str)&&
&&&&&&&TX_485;&&&&&//打开485发送DE端口,关闭接收/RE端口&&
&&&&&&&DelayNmS(1);&&
&&&&&&&&USART_SendData(USART2,&*str++);&&
&&&&&&&&/*&Loop&until&the&end&of&transmission&*/&&
&&&&&&&&while(USART_GetFlagStatus(USART2,&USART_FLAG_TXE)&==&RESET);&&//检测发送数据寄存器空标志位&&
&&&&&&&DelayNmS(1);&&
&&&&&&&&RX_485;&&&&&//关闭发送DE端口,打开接收/RE485端口,&&
}&style="font-family:Times&New&Rfont-size:14"&&&
在芯片的通信中,尤其要注意对控制端的软件编程。为了可靠工作,在总线状态切换时需要做适当延时,再进行数据收发。具体的做法是在数据发送状态下,先将控制端置“”,延时左右的时间,在发送有效的数据,一包数据发送结束后再延时后,将控制端置“”,这样处理会使总线在状态切换时,有一个稳定的工作过程。
阅读(34775) | 评论(0) | 转发(4) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。大家下午好,突然想到一个问题,所以冒泡出来向大家请教学习下。
QQ图片35.png (84.39 KB, 下载次数: 0)
16:39 上传
& &想请教的是,DE/RE管脚是发送接收的使能控制,为什么要通过一个三极管来控制选择呢,我有试过,通过I/O也是可以正常工作的。虽然是简单的问题,总想找个答案,以便更好的设计电路,希望大家帮我解答啊。谢谢
在线时间2982 小时
威望13665分
芯币11666枚
E金币270枚
TA的帖子TA的资源
裸片初长成(初级), 积分 13665, 距离下一级还需 6335 积分
裸片初长成(初级), 积分 13665, 距离下一级还需 6335 积分
直接用I/O控制使能端确实也是可以的,至于原图为什么要加三极管也许另有考虑,比如'Dir485'信号的电平不匹配,或上电瞬间是'低'不是'高',怕某节点上电时会影响并联着的485通信网等等,这要看了关联的电路才可能推断,局部电路说明不了问题。
嗯。知道了,谢谢哈。&
在线时间416 小时
芯币1106枚
TA的帖子TA的资源
一粒金砂(中级), 积分 144, 距离下一级还需 56 积分
一粒金砂(中级), 积分 144, 距离下一级还需 56 积分
我也习惯于直接用IO驱动,用什么画的图啊好亮!
AD啊。可以改变线的颜色。&
在线时间4432 小时
威望27732分
芯币108570枚
E金币1210枚
TA的帖子TA的资源
加三极管确保低有效,防止因为其他缘由的误操作,通过控制三极管就会令RE为低电平时,确保器件处于接收状态,是设计上的小技巧而已
嗯。估计工业控制,要加强抗干拢吧。&
在线时间112 小时
E金币261枚
TA的帖子TA的资源
一粒金砂(中级), 积分 159, 距离下一级还需 41 积分
一粒金砂(中级), 积分 159, 距离下一级还需 41 积分
直接用I/O控制使能端确实也是可以的,至于原图为什么要加三极管也许另有考虑,比如'Dir485'信号的电平不匹 ...
嗯。知道了,谢谢哈。
在线时间112 小时
E金币261枚
TA的帖子TA的资源
一粒金砂(中级), 积分 159, 距离下一级还需 41 积分
一粒金砂(中级), 积分 159, 距离下一级还需 41 积分
我也习惯于直接用IO驱动,用什么画的图啊好亮!
AD啊。可以改变线的颜色。
在线时间112 小时
E金币261枚
TA的帖子TA的资源
一粒金砂(中级), 积分 159, 距离下一级还需 41 积分
一粒金砂(中级), 积分 159, 距离下一级还需 41 积分
加三极管确保低有效,防止因为其他缘由的误操作,通过控制三极管就会令RE为低电平时,确保器件处于接收状态 ...
嗯。估计工业控制,要加强抗干拢吧。
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
画蛇添足而已
EEWORLD 官方微信
Powered by
逛了这许久,何不进去瞧瞧?2015年9月 VC/MFC大版内专家分月排行榜第二2015年7月 硬件/嵌入开发大版内专家分月排行榜第二2014年5月 VC/MFC大版内专家分月排行榜第二2014年3月 VC/MFC大版内专家分月排行榜第二2013年10月 VB大版内专家分月排行榜第二2013年7月 VB大版内专家分月排行榜第二2012年5月 VB大版内专家分月排行榜第二2012年4月 VB大版内专家分月排行榜第二2012年2月 VB大版内专家分月排行榜第二2011年11月 VB大版内专家分月排行榜第二
2015年11月 VC/MFC大版内专家分月排行榜第三2015年6月 VC/MFC大版内专家分月排行榜第三2015年2月 VC/MFC大版内专家分月排行榜第三2014年1月 VC/MFC大版内专家分月排行榜第三2012年3月 VB大版内专家分月排行榜第三2011年12月 VB大版内专家分月排行榜第三2011年10月 VB大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 hdmi发送芯片 的文章

 

随机推荐