打印
[STM32F2]

stm32f207 RS485通信问题,只能连续收发一个字节

[复制链接]
4364|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大家帮我看看。只能收发一个字节,发多了接收不到,貌似溢出了,如何处理呢?
沙发
丿我了个擦灬|  楼主 | 2015-2-16 13:07 | 只看该作者
程序代码如下:#include "pbdata.h"
//#include "stdio.h"

void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void USART_Configuration(void);
uint32_t uartreceive;

int main(void)
{
   RCC_Configuration();         //ϵͳʱÖÓ³õʼ»¯
   GPIO_Configuration(); //¶Ë¿Ú³õʼ»¯
   USART_Configuration();//´®¿Ú³õʼ»¯
   NVIC_Configuration(); //Öжϳõʼ»¯
         
         GPIO_ResetBits(GPIOD,GPIO_Pin_7);
   while(1);
}

void RCC_Configuration(void)
{
        SystemInit();
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
}

void GPIO_Configuration(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
       
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USART2);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_USART2);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_USART2);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//TX ¸´ÓÃÍÆÍìÊä³ö
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//RX ¸¡¿ÕÊäÈë
  //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOD,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//485_CS ÍÆÍìÊä³ö
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOD,&GPIO_InitStructure);
}

void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

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

void USART_Configuration(void)
{
        USART_InitTypeDef  USART_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_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;

        USART_Init(USART2,&USART_InitStructure);

  USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
        USART_Cmd(USART2,ENABLE);
        USART_ClearFlag(USART2,USART_FLAG_TC);
}

中断处理如下:
void USART2_IRQHandler(void)
{
         uartreceive = 0;
   if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
   {
                 
                static int k = 0;
//  uartreceive=USART_ReceiveData(USART2);
                uartreceive=USART2->DR;
                 
                GPIO_SetBits(GPIOD,GPIO_Pin_7);
                delay_ms(1);
                 
                //USART_ClearITPendingBit(USART2, USART_IT_RXNE);
                //USART_ClearFlag(USART2, USART_FLAG_RXNE);
                 
                USART_SendData(USART2,uartreceive);
                while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
                delay_ms(1);
                delay_ms(1);
                GPIO_ResetBits(GPIOD,GPIO_Pin_7);
   }
}

使用特权

评论回复
板凳
丿我了个擦灬|  楼主 | 2015-2-16 13:12 | 只看该作者
附调试图,一次性发2个字节以上接收回来的是乱码。。。

1.png (39.16 KB )

1.png

2.png (39.35 KB )

2.png

使用特权

评论回复
地板
丿我了个擦灬|  楼主 | 2015-2-16 18:23 | 只看该作者
请大神指教...........

使用特权

评论回复
5
airwill| | 2015-2-16 18:39 | 只看该作者
你自己的中断服务的问题.
中断服务里搞了几个 delay_ms(1), 那么长时间下来, 第二个字符早收到了
这个中断服务怎样写, 参考一下外设库里的例程, 好好动动脑子吧

另外, 本人很不喜欢楼主的论坛ID, 作为技术人员, 认真踏实是首先要培养的心里素质和做事风格

使用特权

评论回复
6
丿我了个擦灬|  楼主 | 2015-2-16 20:53 | 只看该作者
airwill 发表于 2015-2-16 18:39
你自己的中断服务的问题.
中断服务里搞了几个 delay_ms(1), 那么长时间下来, 第二个字符早收到了
这个中断 ...

首先,对于我的ID,给大家道歉了,当时没有认真注册,请大家不要介意!其次,非常感谢你给我指出问题,我会抓紧解决的。最后,我是菜鸟,基础比较差,会踏踏实实学习的。

使用特权

评论回复
7
me@road| | 2015-12-16 20:41 | 只看该作者
你好 我也是刚刚接触STM32F207,遇到了和你一样的问题,现在你的问题解决了吗?可以加个好友?1143478636这个是我的QQ

使用特权

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

本版积分规则

2

主题

8

帖子

1

粉丝