IO模拟串口发送

1 串口传输 默认 波特率1000 ,1起始位 8个数据位,1校验位,1停止位 。

2 传输时,从起始位开始,从一个数据的低位(LSB)开始发送,如图从左向右的顺序,对电平拉高或拉低,最后停止位时拉高。
3 波特率大小,改变延时时间即可。例如 1000 波特率    根据公式 : 1/1000=0.001s 也就是说每发送1bit延时1Ms .

4 串口发送       将电平拉低 延时1MS(视为 起始位 0 ,传输数据正式开始)  其中数据位发送的是16进制数据(8bit  一字节  例如10001000)  将想要发的数据按照二进制的‘0’‘1’高低电平的方式,每发送1bit 延时1Ms   直到发送完到停止位 将电平拉高视为一包数据传输结束。

代码如下:

u8  Sendinfo[] ={0xAA,0x14,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x0B,0x0C,0x0D};
#define  IO_LOW()            GPIO_ResetBits(GPIOB, GPIO_Pin_12)
#define  IO_HIGH()            GPIO_SetBits(GPIOB, GPIO_Pin_12)
//微秒级的延时
void delay_us(uint32_t delay_us)
{
  volatile unsigned int num;
  volatile unsigned int t;
  for (num = 0; num < delay_us; num++)
  {
    t = 11;
    while (t != 0)
    {
      t--;
    }
  }
}
//毫秒级的延时
void Delay_Ms(uint16_t delay_ms)
{
  volatile unsigned int num;
  for (num = 0; num < delay_ms; num++)
  {
    delay_us(1000);
  }
}

void SendByte(u8 Sval)
{
     //发送起始位
     u8 jnum=8;

     IO_LOW(); //起始位,拉低电平
     Delay_Ms(1);
     //发送8位数据位
     while(jnum--)
     {
        if(Sval & 0x01)  //先传低位
        IO_HIGH();
        else
        IO_LOW();
        Delay_Ms(1);
        Sval=Sval>>1;
     }

     //发送校验位

    IO_HIGH();

    Delay_Ms(1);

     //发送结束位 高电平
     IO_HIGH();
     Delay_Ms(1);
    
}  

void Sendata()
{
     u8 i=0;
     for(i=0;i<sizeof(Sendinfo);i++)//外层循环,遍历数组
    {
          SendByte(Sendinfo[i]);
    }
}
 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值