打印
[应用相关]

感觉是没进入中断

[复制链接]
279|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuzaiy|  楼主 | 2020-7-4 21:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//初始化配置
void RS485_Init(void)  
{   

              USART_InitTypeDef USART_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
              NVIC_InitTypeDef NVIC_InitStructure;   

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);//ʹÄÜGPIOA/USARTʱÖÓ
                    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//¹¦Äܸ´ÓÃIOʱÖÓʹÄÜ
        USART_Cmd(USART1, ENABLE);//ʹÄÜUSART

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;           //RX½ÓÊÕÒý½Å
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //¸¡¿ÕÊäÈë
        GPIO_Init(GPIOA,&GPIO_InitStructure);        //ÅäÖÃ IO

                    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;           //TX·¢ËÍÒý½Å
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸´ÓÃÍÆÍìÊä³ö
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;        //Êä³öËÙ¶È
        GPIO_Init(GPIOA,&GPIO_InitStructure);        //ÅäÖÃ IO



                    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;             //485¿ØÖÆÒý½Å
              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //ÍÆÍìÊä³ö
               GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        
              GPIO_Init(GPIOA, &GPIO_InitStructure);
                                GPIO_ResetBits(GPIOA, GPIO_Pin_8);//ĬÈϽÓÊÕģʽ
                                


        USART_ClearFlag(USART1,USART_FLAG_TC);//Çå³ý´®¿Ú´¦Àí±ê־λ
                                USART_ClearITPendingBit(USART1, USART_IT_RXNE);//Çå³ý´®¿ÚÖжϱê־λ
        USART_StructInit(&USART_InitStructure);
                    USART_Init(USART1,&USART_InitStructure);
               USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);        //ÖжÏʹÄÜ


        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;     
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);


           
}  
//中断接收
void USART1_IRQHandler(void)     
{
        u8 RX_dat;
  
  if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)//USART_IT_RXNE:????
  {
    RX_dat=USART_ReceiveData(USART1);   
    GPIO_SetBits(GPIOA,GPIO_Pin_8);
    delay_ms(1);
    USART_SendData(USART1,RX_dat);   
    while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET){} //???????????
    delay_ms(2);
    GPIO_ResetBits(GPIOA,GPIO_Pin_8);
  }   

如题 我之前用串口助手测试232通信 这个测试程序通过了  但换成485通信时(相同串口,只是多了一个控制引脚),程序就实现不了了

使用特权

评论回复
沙发
zwll| | 2020-7-4 22:57 | 只看该作者
多看看例程吧,不要在中断里面等待和延时。

使用特权

评论回复
板凳
dingy| | 2020-7-4 23:00 | 只看该作者
在接收数据超时或按协议接收完成后,再发送数据。

使用特权

评论回复
地板
houcs| | 2020-7-4 23:03 | 只看该作者
亲 程序流程有问题

使用特权

评论回复
5
ousj| | 2020-7-4 23:06 | 只看该作者
哪有在中断里使用while的啊

使用特权

评论回复
6
liuzaiy|  楼主 | 2020-7-4 23:10 | 只看该作者

这是我在网上找的 因为我之前的那个不行
我原来的中断是void USART1_IRQHandler(void)     
{

  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
  
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);
        USART1_Buffer[uart_p]=USART_ReceiveData(USART1);
        uart_p++;
  }        

}
接收完后再发送的数据

使用特权

评论回复
7
yufe| | 2020-7-4 23:37 | 只看该作者
你是直接把232当485来使用,不用加485的芯片吗?

使用特权

评论回复
8
langgq| | 2020-7-4 23:42 | 只看该作者
是不是有多个中断,看中断组的配置是否合理

使用特权

评论回复
9
huanghuac| | 2020-7-4 23:45 | 只看该作者
之前遇到的问题好像是中断配置的有问题

使用特权

评论回复
10
songqian17| | 2020-7-4 23:49 | 只看该作者
还有就是串口中断函数里放了串口打印函数

使用特权

评论回复
11
llljh| | 2020-7-5 09:53 | 只看该作者
中断不要延时啊,,,,,

使用特权

评论回复
12
liuzaiy|  楼主 | 2020-7-5 09:56 | 只看该作者

哦,那我就知道怎么回事了,多谢大家

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

735

主题

7546

帖子

2

粉丝