STM32常用通信——USART,IIC,SPI,CAN

STM32常用通信
CAN通信
CAN根据两根线上电位差来判断总线电平,总线电平分为显性电平和隐形电平,两者必居其一,发送方通过控制总线电平发送信息给接收方。
显性电平对应逻辑0,两根线压差2.5V左右,隐形电平对应逻辑1,压差为0。总线上可以挂很多单元,显性电平具有优先权,一个单元
显性电平,则总线为显性。CAN总线起止断有120R的电阻,用于做阻抗匹配,减少回波反射。
STM32常用通信——USART,IIC,SPI,CAN_第1张图片
CAN的位时序:
<同步段SS>SS
<传播时间段PTS
相位缓冲段1   PBS1>BS1
<相位缓冲段2   PBS2>BS2
1位分为四段,每段由若干Tq组成,
波特率=1/(Tq+TBS1+TBS2)
TBS1=Tq*(TS1[3:0]+1)
TBS2=Tq*(TS2[2:0]+1)
Tq=(BRP[9:0]+1)*TCLK
TCLK=APB时钟周期
过滤器:
互联型28个过滤器,增强型14个过滤器(ag:F103ZET6);
每个过滤器由两个32位寄存器CAN_FxR1和CAN_FxR2组成。
期望收到的值:CAN_FxR1,必须关心的ID:CAN_FxR2;
控制寄存器:
CAN_MCR,INRQ位置1初始化,置零进入正常工作模式。
CAN_BTR,用于设置分频系数BRP,TS1,TS2,决定CAN波特率
发送流程:
选择空置邮箱,设置标识符ID,数据长度和发送数据,请求发送,挂号(等待成为最高优先级),等待总线空闲,发送,空置邮箱
接收流程:
FIFO空,接受有效报文,挂号1(读出,释放邮箱),挂号2(读出,释放邮箱).......满溢出,丢失信息。

SPI
四线通信,MOSI,MISO,CS,SCLK,串行通信,通过移位寄存器进行操作,所以读的时候,需要发送空子节,引起主机发送,如果是
写,则不需要考虑接收。
SPI主模块和与之通信的外设备时钟相位和极性应该一致。
32配置省略......
模拟SPI:
void Write_date ()//SPI写模拟CPHA=1,CPOL=1操作的伪代码
{
    片选CS置零选中;
 for(i=0;i<8;i++)//八位
 {    
  时钟脚置为零;
  if(dat&0x80)
     发送1;
  else
     发送0;
  时钟置高;
  dat<<=1;//先发高位 
 }
    片选CS置高取消选中; 
}
IIC
IIC为串行总线,三种类型信号
开始信号:SCL为高电平时,SDA出现下降沿
结束信号:SCL为高电平时,SDA出现上升沿
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据CPU 向受控单元发出一个信号后,
等待受控单元发出一个应答信号, CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
数据传输:
SCL高电平时,SDA数据写入,所以要变化SDA值,需要在SCL低电平时。

USART
通过定时器产生,确定波特率,一般8位,起始,停止各一位,无奇偶校验位,串行通信,RX,TX
不仔细详谈了


你可能感兴趣的:(STM32,MCU)