OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2819|回复: 4

原子大哥,用485串口发送数据,怎么会进串口接收中断???求解决!!!

[复制链接]

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2015-7-3
在线时间
8 小时
发表于 2016-9-14 09:16:48 | 显示全部楼层 |阅读模式
2金钱


//3õê¼»ˉIO ′®¿ú3
//pclk1CLK1ê±ÖóÆμÂê(Mhz)
//bound:2¨ìØÂê          
void RS485_Init(u32 bound)
{  

  USART_InitTypeDef USART_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//ê1ÄüUSART3ê±Öó

        RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3,ENABLE);//¸′λ′®¿ú3
        RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3,DISABLE);//í£Ö1¸′λ


#ifdef EN_USART3_RX                          //èç1ûê1Äüá˽óêÕ
        USART_InitStructure.USART_BaudRate = bound;//2¨ìØÂêéèÖÃ
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8λêy¾Y3¤¶è
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
        USART_InitStructure.USART_Parity = USART_Parity_No;///ÆæÅ¼D£Ñéλ
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//êÕ·¢Ä£ê½

  USART_Init(USART3, &USART_InitStructure); ; //3õê¼»ˉ′®¿ú
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿aÆôÖD¶Ï

  USART_Cmd(USART3, ENABLE);                    //ê1Äü′®¿ú

#endif

  RS485_TX_EN=0;                        //ĬèÏÎa½óêÕÄ£ê½


}





void USART3_IRQHandler(void)
{
        u8 res=0,ib=0;            

        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //½óêÕμ½êy¾Y
        {         
                  USART_ClearITPendingBit(USART3,USART_IT_RXNE);                 
                res =USART_ReceiveData(USART3);         //¶á衽óêÕμ½μÄêy¾Y
                RS485_RX_BUF[RS485_RX_CNT]=res;
                RS485_RX_CNT++;
                if(res==0xF0)
                {
                        RS485_Rev_Num=RS485_RX_CNT-1;
                        for(ib=0;ib<RS485_Rev_Num;ib++)        RS485_Rev_Data[ib]=RS485_RX_BUF[ib];
                        RS485_RX_CNT=0;
                        F_RS485=1;

                }
        }                                                                                           
}





void Uart_TX_Process(void)
{
//        if(F_rs485_clk==1)
//        {
                F_rs485_clk=0;
                if(RS485_TX_CNT!=0)                                //&#199;&#189;°&#229;485′&#174;&#191;ú·¢&#203;í
                {
                        if(USART_GetFlagStatus(USART3, USART_FLAG_TC) != RESET)
                        {       
                                USART_ClearITPendingBit(USART3,USART_FLAG_TC);
                                RS485_TX_EN=1;   
                                RS485_TX_CNT--;
                                USART_SendData(USART3,RS485_TX_BUF[RS485_TX_CNT]);
                        }
                }
                else        RS485_TX_EN=0;                                //éè&#214;&#195;&#206;a&#189;óê&#213;&#196;£ê&#189;       

                if(Relay_TX_NUM!=0)                                //12&#194;·&#188;ìμ&#231;&#198;÷′&#174;&#191;úêy&#190;Y
                {

                        if(USART_GetFlagStatus(UART4, USART_FLAG_TC) != RESET)
                        {                               
                                USART_SendData(UART4,Relay_TX_BUF[Relay_TX_NUM]);
                                Relay_TX_NUM--;
                        }
                }
//        }

}








接收中断

接收中断

发送程序

发送程序

最佳答案

查看完整内容[请看2#楼]

楼主把发送函数屏蔽,运行程序,用示波器看看接收端是否有数据过来。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1105
金钱
1105
注册时间
2015-10-27
在线时间
206 小时
发表于 2016-9-14 09:16:49 | 显示全部楼层
楼主把发送函数屏蔽,运行程序,用示波器看看接收端是否有数据过来。
回复

使用道具 举报

5

主题

266

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1526
金钱
1526
注册时间
2016-7-20
在线时间
155 小时
发表于 2016-9-19 15:04:02 | 显示全部楼层
我看了下你这程序流程,是串口中断接收到数据,存入RS485_RX_BUF[RS485_RX_CNT]这个BUF里,再调用void Uart_TX_Process(void)这个函数去发。
我是可以什么都不说 ,但不可以什么都不做。
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2016-9-19 15:47:33 | 显示全部楼层
485芯片本来就是接在串口的
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
发表于 2016-9-20 09:47:15 | 显示全部楼层
天天232、天天485.....送你个万能的程序:http://www.openedv.com/thread-84295-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 08:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表