求助:STM32 通用IO模拟串口

2019-03-23 20:36发布

大家好,我现在使用STM32开发板,遇到一个问题,就是必须用一个通用IO来模拟串口。

我将通用IO配置如下:

  /* Configure USART4 Tx (Pc.09) as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
      
  /* Configure USART4 Rx (Pc.8) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;// GPIO_Mode_IPU;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

收数据程序如下:

u8 ReadByte(void)
{
    u8 Output=0;
    u8 i=8;
    u8 temp=RDDYN;
        int iTemp = 0;

    //发送8位数据位                   
        while(1)
        {
                iTemp = (GPIOC->IDR & 0x0100);
               
                if(iTemp == 0)        //低电平,表示收到起始位
                {
                    while(i--)
                        {
                                        Delay(100); //100 96
                                Output >>=1;
                       
                                if(GPIOC->IDR & 0x0100)Output|=0x80;           

                                //位间间隔104us
                         }
                     break;
                }
               
        }
   
        return Output;
}  

但是收到的数据就是不对,我使用的是波特率9600,位间间隔是104us。
函数Delay是微妙级别的延时,使用STM32的systick来延时,应该还是比较准确的。
但是收到的数据不对。

感觉自己现在已经是束手无策了!

请各位做过的前辈说说你们在这方面曾经遇到过的问题,能给我点启发就好了!

谢谢大家! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
qy7551693
2019-03-24 07:56
首先谢谢ly_liuyang,没办法,现在上头要在不改硬件的情况做,就必须这样了。

我把这样的方法应用在于PC机通信的串口上,去收串口发的数据,可以收到。

但是放到通用IO上就不行了。

在网上也看到过前辈用51单片机模拟串口,似乎效果还可以,但是怎么STM32上就不行了呢?

想不明白。。。

一周热门 更多>