大家好,欢迎来到IT知识分享网。
并行通信:
串行通信
同步
事情有先后,要一件一件的做;如果前一件事卡在那做不了,后面的事情就阻塞在那没法做,跟着遭殃。
异步
单工
半双工
全双工
串口协议UART(串行、全双工、异步)
void UART_Send_Byte(char Dat) {
//等待发送寄存器为空,即上个数据发送完成 while(!(UART2.UTRSTAT2 & (1 << 1))); //将要发送的数据写入发送寄存器 UTXH2 UART2.UTXH2 = Dat; } char UART_Rec_Byte(void) {
char Dat = 0; //判断接收寄存器是否收到数据 if(UART2.UTRSTAT2 & 1) {
Dat = UART2.URXH2; return Dat; } else {
return 0; } } void UART_Send_Str(char *pstr) {
while(*pstr != '\0'){
UART_Send_Byte(*pstr++); } } int main() {
char RecDat = 0; UART_Init(); while(1) {
UART_Send_Str("Hello World\n"); } return 0; }
上述UART_Send_Str(“Hello World\n”);类似printf(“Hello World\n”);
以前的printf是调用c库的,执行在显卡,现在是开发板上实现printf的功能而且是执行在UART,这种情况就是printf的输出重定向
RS232和RS485
IIC(串行、半双工、同步)
IIC不是点对点的通信(不是串口那种TX接RX,RX接TX)
SDA是总线,SCL是时钟
按照上面通信过程,假设单片机A作为主机,控制日历时钟(地址0x03,占数据的7位,后面留1位是用来判断收发状态(数据传送方向)的,如果是0则表示接下来的是主机发从机数据,如果是1则表示接下来是主机从从机那接收数据),首先单片机A发送起始信号启用总线,然后单片机A发送一个字节数据指明从机地址0x03和传送方向,接着对应从机给出回应反馈应答信号,之后就是按照已固定的传送方向进行通信(如果传送方向位是0则后面一直是主机发从机数据然后从机回应反馈应答信号,如果是1则后面一直是从机发主机数据,直到主机不再应答传输数据结束),最后主机发送停止信号释放总线结束信号传输
和串口的先发低位不同,IIC是先发高位,然后从高到低。
9位=7位从机地址+1位传送方向标志位+1位对齐从机的应答位
SPI(串行、全双工、同步)
比如高电平使能,所以CS1发1,CS2等要发0,从而表示跟从机1通信。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/130668.html