嵌入式培训—12.16

串行通信

① UART(通用异步全双工收发器):

        (1)串行:多个时钟周期内,每一时钟周期采样一位有效数据,通信速度慢,抗干扰能力强;

        (2)并行:多个时钟周期内,每一时钟周期采样一组有效数据,通信速度快,抗干扰能力弱,资源占用多;

② 如何定义

        (1)同步:有时钟线,误差小,占用资源多;

        (2)异步:无时钟线,传输速率高;

        (3)单工:单一方向传输数据;

        (4)双工:

                            1、全双工:收发同时;

                            2、半双工:一根线实现收发;

 ③ UART模型:

        协议:RS232:

                                (1)电气特性:DB9的235接口;

                                (2)帧格式;

④ 数据帧格式

        (1)起始位:1位低电平;

        (2)有效数据位:8或9位;

        (3)校验位(奇或偶):1位校验位;

        (4)结束位:0.5 / 1 / 1.5 / 2 位高电平;

⑤ 传输速率

        (1)bit / s                比特率;

        (2)B / s                 波特率;

⑥ 任务:使用串行通信控制灯开关

        代码:

#include "Key_Use.h"

#define MAX 20

#define Timeout 0xFFFF

static u32 j=MAX, i=0, k=0, l=0, a=0;

uint8_t UART1_Ctrl[6][6]={"led_r","led_g","led_b","bee_o","led__","bee__"};

uint8_t Mesage[6]={"\0"};

HAL_StatusTypeDef UART1_SendStr(uint8_t *buf,uint32_t size)

{

return HAL_UART_Transmit(&huart1, buf, size, Timeout);

}

HAL_StatusTypeDef UART1_ResvStr(uint8_t *buf,uint32_t size)

{

return HAL_UART_Receive(&huart1, buf, size, Timeout);

}

void UART1_LEDCtrl()

{

while(1)

{

if(UART1_ResvStr((uint8_t *)Mesage,5) == HAL_OK)

{

if(memcmp(Mesage,UART1_Ctrl[0],5) == 0)

{

LED_G_OFF();

LED_B_OFF();

LED_R_ON();

}

///////////////////////////////////////

if(memcmp(Mesage,UART1_Ctrl[1],5) == 0)

{

LED_R_OFF();

LED_B_OFF();

LED_G_ON();

}

///////////////////////////////////////

if(memcmp(Mesage,UART1_Ctrl[2],5) == 0)

{

LED_G_OFF();

LED_R_OFF();

LED_B_ON();

}

///////////////////////////////////////

if(memcmp(Mesage,UART1_Ctrl[3],5) == 0)

BEEP_ON();

///////////////////////////////////////

if(memcmp(Mesage,UART1_Ctrl[4],5) == 0)

{

LED_G_OFF();

LED_R_OFF();

LED_B_OFF();

}

///////////////////////////////////////

if(memcmp(Mesage,UART1_Ctrl[5],5) == 0)

BEEP_OFF();

}

memset(Mesage,0,6);

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。