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]);
}
}