zoukankan      html  css  js  c++  java
  • GPIO模拟串口发送,操作系统FREERTOS

    #define GPIO_PORT_SIMULATE_UART_TX GPIOE
    #define GPIO_PIN_SIMULATE_UART_TX GPIO_PIN_4
    #define TX(n) gpio_bit_write(GPIO_PORT_SIMULATE_UART_TX,GPIO_PIN_SIMULATE_UART_TX,(bit_status)n)
    #define BAUD_9600_US (104)
    #define BAUD_115200_US (8)

    void Drv_Simulate_Uart_Init(void)
    {
      gpio_init(GPIO_PORT_SIMULATE_UART_TX,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_SIMULATE_UART_TX);
      TX(1);
    }

    void Drv_Simulate_Uart_SendByte(bs_uint8_t data)
    {

      taskENTER_CRITICAL();//这里必须要,不然系统调度导致发送时序错误,从而产生乱码,且不要放在Drv_Simulate_Uart_SendString()函数里面,因为如果发送较长的buffer,会影响正常调度,因为里面用的是硬件延时

      bs_uint8_t i = 0;
      TX(0); //起始位
      DelayUs(BAUD_115200_US);
      for(i = 0; i < 8; i++)
      {
        if(data & 0x01)
        {
          TX(1);
        }
        else
        {
          TX(0);
        }
      DelayUs(BAUD_115200_US);
      data >>= 1;
      }
      TX(1); //停止位
      DelayUs(BAUD_115200_US);

      taskEXIT_CRITICAL();//这里必须要,不然系统调度导致发送时序错误,从而产生乱码

    }

    void Drv_Simulate_Uart_SendString(bs_uint8_t *p,bs_uint8_t len)
    {
      
      while(len--)
      {
        Drv_Simulate_Uart_SendByte(*p);
        p++;
      }

      return;
    }

  • 相关阅读:
    🍖名称空间与作用域
    🍖文件打开模式 "t"
    🍖函数参数
    【转】LINQ中的Aggregate语法
    【转】c#中string.trimstart() 和string.trimend() 的用法
    1094 和为k的连续区间(暴力)
    1095 Anigram单词
    1031 骨牌覆盖 (斐波拉契数列)
    最长公共子序列(模板 LCSL)
    1092 回文字符串(LCSL_DP)
  • 原文地址:https://www.cnblogs.com/ycpkbql/p/13815951.html
Copyright © 2011-2022 走看看