在CAN总线上的所有节点必须有相同的波特率。CAN协议使用“反向不归零(NRZ)”编码,这个编码不能对数据串的时钟进行编码。因此,接收节点的时钟必须与发送节点的时钟同步。
由于振荡器或发送时钟可能随节点的不同而改变,所以接收器必须要有与发送时钟边沿同步的锁相回路(PLL),使接收器时钟同步。因为数据是NRZ代码,有必要加一个填充位以确保至少每6个时钟周期后产生一个脉冲边沿,使数据锁相回路(DPLL)同步。
PIC18F4580单片机芯片的位定时时间分成许多称做时间当量(T Q)的最小时间周期所组成时间段。
总线的定时功能是在位时间帧中执行的,例如与自身振荡器同步、网络传输延时补偿和采样节点,都是通过DPLL的可编程位定时逻辑来配置。
CAN总线上的所有器件秘须使用相同的位率。然而,不是所有器件都要求有相同的主控振荡器时钟频率。对于个别器件不同的时钟频率,秘须通过适当设定波特率后分频器和每个时间段的时间当量来调整。
标称的位率是每秒发送的位数,条件是假定理想的发送器带理想振荡器,而且忽略重同步的情况。这个标称的位率最大值是1Mbps。
标称位时间定义如下:
T Bit=1/标称位率
位时间可以认为是被分成单独的没有重叠的时间段
●同步时间段(Sync_Seg);
●传输时间段(Prop_Seg);
●相位缓冲时间段1(Phase_Seg1);
●相位缓冲时间段2(Phase_Seg2);
时间段(或标称时间段)是由时间当量或T Q整数倍构成的。由定义可知,位时间可编程为最小8T Q 到最大25T Q。持续时间由以下关系给出:
标称位时间=T Q×(Sync_Seg+Prop_Seg+Phase_Seg1+Phase_Seg2)时间当量来源于晶振周期的固定单位。它也可通过一个带1-64的整数值的可编程的波特率分频器和一个固定2分频的时钟发生器来确定。公式可表示为
T Q=[2×(BRP+1)]/F osc
其中,FOSC为时钟频率,BRP为BRGCON1<5..0>的数(0-63)。
在PIC18F4580芯片中与CAN波特率设定相关的寄存器有三个:
●BRGCON1
●BRGCON2
●BRGCON3
BRGCON1波特率寄存器主要设定同步时间段(Sync_Seg)和波特率分频器系数(BRP);
BRGCON2波特率寄存器主要设定Phase_Seg1和Prop_Seg时间段;
BRGCON3波特率寄存器主要设定Phase_Seg2
下面是在SP9608-PIC单片机增强型开发板上使用PIC18F4580芯片进行CAN实验设定CAN波特率为250kbps的程序段,其中FOSC=32MHz(8MHz通过4倍频PLL到32MH z)。
CANCON=0x80;
while(0==(CANSTAT&0x80));
BRGCON1=0x07;//8*TQ=8*(2*(BRP+1))/FOSC =250kbps BRGCON2=0x90;
BRGCON3=0x42;
﹍﹍﹍
CANCON=0x00;
while(0!=(CANSTAT&0xE0));
51单片机串口通信及波特率设置 MCS-51单片机具有一个全双工的串行通信接口,能同时进行发送和接收。它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。 1. 数据缓冲寄存器SBUF SBUF是可以直接寻址的专用寄存器。物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU写SBUF就是修改发送寄存器;读SBUF就是读接收寄存器。接收器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生重叠问题。 2. 状态控制寄存器SCON SCON是一个逐位定义的8位寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态,SCON即可以字节寻址也可以位寻址,字节地址98H,地址位为98H~9FH。它的各个位定义如下: MSB LSB SM0 SM1 SM2 REN TB8 RB8 TI RI SM0和SM1是串口的工作方式选择位,2个选择位对应4种工作方式,如下表,其中Fosc是振荡器的频率。 SM0 SM1 工作方式功能波特率 0 0 0 8位同步移位寄存器Fosc/12 0 1 1 10位UART 可变 1 0 2 11位UART Fosc/64或Fosc/32 1 1 3 11位UART 可变 SM2在工作方式2和3中是多机通信的使能位。在工作方式0中,SM2必须为0。在工作方式1中,若SM2=1且没有接收到有效的停止位,则接收中断标志位RI不会被激活。在工作方式2和3中若SM2=1且接收到的第9位数据(RB8)为0,则接收中断标志RB8不会被激活,若接收到的第9位数据(RB8)为1,则RI置位。此功能可用于多处理机通信。 REN为允许串行接收位,由软件置位或清除。置位时允许串行接收,清除时禁止串行接收。 TB8是工作方式2和3要发送的第9位数据。在许多通信协议中该位是奇偶位,可以按需要由软件置位或清除。在多处理机通信中,该位用于表示是地址帧还是数据帧。 RB8是工作方式2和3中接收到的第9位数据(例如是奇偶位或者地址/数据标识位),在工作方式1中若SM2=0,则RB8是已接收的停止位。在工作方式0中RB8不使用。 TI 为发送中断标志位,由硬件置位,软件清除。工作方式0中在发送第8位末尾由硬件置位;在其他工作方式时,在发送停止位开始时由硬件置位。TI=1时,申请中断。CPU 响应中断后,发送下一帧数据。在任何工作方式中都必须由软件清除TI。 RI为接收中断标志位,由硬件置位,软件清除。工作方式0中在接收第8位末尾由硬件置位;在其他工作方式时,在接收停止位的中间由硬件置位。RI=1时,申请中断,要求CPU取走数据。但在工作方式1中,SM2=1且未接收到有效的停止位时,不会对RI置位。在任何工作方式中都必须由软件清除RI。 系统复位时,SCON的所有位都被清除。 控制寄存器PCON也是一个逐位定义的8位寄存器,目前仅仅有几位有定义,如下所示:MSB LSB
MSP430波特率的计算 给定一个BRCLK时钟源,波特率用来决定需要分频的因子N: N = fBRCLK/Baudrate 分频因子N通常是非整数值,因此至少一个分频器和一个调制阶段用来尽可能的接近N。 如果N等于或大于16,可以设置UCOS16选择oversampling baud Rate模式注:Round():指四舍五入。 Low-Frequency Baud Rate Mode Setting 在low-frequency mode,整数部分的因子可以由预分频实现: UCBRx = INT(N) 小数部分的因子可以用下列标称公式通过调制器实现: UCBRSx = round( ( N –INT(N) ) × 8 ) 增加或减少UCBRSx一个计数设置,对于任何给定的位可能得到一个较低的最高比特误码率。如果确定是这样的情况UCBRSx设置的每一位必须执行一个精确的错误计算。 例1:1048576Hz频率下驱动以115200波特率异步通讯 ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz。 N = fBRCLK/Baudrate = 1048576/115200 = ~9.10 UCBRx = INT(N) = INT(9.10) = 9 UCBRSx = round( ( N –INT(N) )×8 ) = round( ( 9.10 –9) × 8 )=round(0.8 )=1 UCA0CTL1 |= UCSSEL_2;// 选SMCLK为时钟 UCAxBR0 = 9; UCAxBR1 = 0; UCAxMCTL = 0x02;//7-4:UCBRFx,3-1:UCBRSx,0:UCOS16 UCBRSx 为寄存器UCAxMCTL的1-3位,所以写入0x02(00000010) 例2:32768Hz频率下驱动以2400波特率异步通ACLK = REFO = ~32768Hz, MCLK = SMCLK = DCO ~1.045MHz N = fBRCLK/Baudrate = 32768/2400 = ~13.65 UCBRx = INT(N) = INT(13.65) = 13 UCBRSx = round( ( N –INT(N) )×8 ) = round( ( 13.65 –13) × 8 )=round(5.2)=5 UCA0CTL1 |= UCSSEL_1; // 选ACLK为时钟 UCAxBR0 = 13;UCAxBR1 = 0 ; UCAxMCTL = 0x0A;//7-4:UCBRFx,3-1:UCBRSx,0:UCOS16 UCBRSx为寄存器UCAxMCTL的1-3位,所以写入0x0A(00001010) Oversampling Baud Rate Mode Setting 在oversampling mode 与分频器设置如下:
CAN总线能够在一定的范围内容忍总线上CAN节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个节点的振荡器精度。 实际上,CAN总线的波特率是一个范围。假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实际的波特率可能为200~300KB/S(具体值取决于寄存器的设置)。 在CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括: A.位同步时间(Tsync) B.时间段1(Tseg1) C.时间段2(Tseg2) 其中位同步时间占用1个Tscl;时间段2占用(Tseg1+1)个Tscl;时间段2占用(Tseg2+1)个Tscl,所以CAN控制器的位时间(TBit)就是: TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl CAN的波特率(CANbps)就是1/TBit。Tsync=1Tscl 但是这样计算出的值是一个理论值。在实际的网络通信中由于存在传输的延时、不同节点的晶体的误差等因素,使得网络CAN的波特率的计算变得复杂起来。CAN在技术上便引入了重同步的概念,以更好的解决这些问题。 这样重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此CAN的波特率实际上有一个范围: 1/(Tbit+Tsjw) ≤CANbps≤1/(Tbit-Tsjw) CAN有波特率的值四以下几个元素决定: A.最小时间段Tscl; B.时间段1 TSEG1; C.时间段2 TSEG2; D.同步跳转宽度SJW SJW(重同步跳转宽度)决定了一次重同步期间一个位时间被延长或缩短的时间量子Tscl是通过总线时序寄存器设置计算的。 Tscl=(BRP+1)/FVBP。FVBP为微处理器的外设时钟。 而TSEG1与TSEG2又是怎么划分的呢?TSEG1与TSEG2的长度决定了CAN数据的采样点,这种方式允许宽范围的数据传输延迟和晶体的误差。其中TSEG1用来调整数据传输延迟时间造成的误差,而TSEG2则用来调整不同点节点晶体频率的误差。 TSEG1与TSEG2的是分大体遵循以下规则: Tseg1≥Tseg2≥2TSJW;Tseg2≥2Tscl 总的来说,对于CAN的波特率计算问题,把握一个大的方向就行了,其计算公式可了规结为: BitRate = Fpclk/( (BRP+1) * ((Tseg1+1)+(Tseg2+1)+1))
51单片机波特率计算的公式和方法 51单片机芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。它的各个位的具体定义如下: SM0SM1SM2REN TB8RB8TI RI SM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工作模式设置。 波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输那么加上起始位和停止位,每个数据字节就要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是9600÷10=960字节。 51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64或fosc/32,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD为0,波特率为focs/64,SMOD为1,波特率为focs/32。 模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率,就是说定时器1每溢出一次,串口发送一次数据。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。
上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2下定时器1溢出速率的计算公式如下: 溢出速率=(计数速率)/(256-TH1初值) 溢出速率=fosc/[12*(256-TH1初值)] 上式中的“计数速率”与所使用的晶体振荡器频率有关,在51芯片中定时器启动后会在每一个机器周期使定时寄存器TH的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到9600的波特率,晶振为11.0592M和12M,定时器1为模式2,SMOD 设为1,分别看看那所要求的TH1为何值。代入公式: 11.0592M 9600=(2÷32)×((11.0592M/12)/(256-TH1)) TH1=250
CAN波特率设置时的参数计算 CAN(Controller Area Network)总线最早由德国 BOSCH公司提出,主要用于汽车内部测量与控制中心之间的数据通信。由于其良好的性能,在世界范围内广泛应用于其他领域当中,如工业自动化、汽车电子、楼宇建筑、电梯网络、电力通讯和安防消防等诸多领域,并取逐渐成为这些行业的主要通讯手段。 Can 控制器器只需要进行少量的设置就可以进行通信,其中较难设置的部分就是通信波特率的计算。CAN总线能够在一定的范围内容忍总线上CAN节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个节点的振荡器精度。实际上,CAN总线的波特率是一个范围。假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实际的波特率可能为200~300KB/S(具体值取决于寄存器的设置)。 CAN波特率设置时需要计算几个参数,这些参数共同决定波特率大小,由于计算比较复杂,希望有一个简易步骤,本人经过研究,找到一个简易办法,现贴出来分享,不对的地方请留言指正。需要说明的是,本人使用的can控制器是AT89C51CC03单片机中的can 首先,确定一下各项参数的取值范围: 参数范围编程值说明 BRP [1..64] 0-63 定义时间量子(时间份额)的长度tq Sync_Seg 1 tq 固定长度,总线输入与系统时钟同步 Prog_Seg [1..8]tq 0-7 补偿物理延时时间 Phase_Seg1 [1..8]tq 0-7 可通过同步暂时延长 Phase_Seg2 [1..8]tq 0-7 可通过同步暂时缩短 TSJW [1..4]tq 0-3 不能比任何一相位缓冲段长 以上是参数的取值范围,编程值是实际往寄存器里写的值,为实际取值减1。下面说一下步骤: 1、首先计算CAN时钟和波特率的比值; 2、根据比值确定预分频器的分频值BRP,计算时间量子的数目,这个数值范围是8-25; 3、将时间量子数减1(去掉Sync_Seg)后在Prog_Seg Phase_Seg1 Phase_Seg2三个参数中分配;
MSComm串行通讯控件设置串口、波特率等参数方法(转 (2010-03-07 14:07:21) 转载 分类:程序设计 标签: it 一.想一进入程序,有默认的串口参数设置: 1.把参数值设定死 在OnInitDialog()函数里添加: if (m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE); m_ctrlComm.SetCommPort(1); // 选择com1 if (!m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE); // 打开串口 else AfxMessageBox("cannot open serial port"); m_ctrlComm.SetSettings("9600, n, 8, 1"); // 波特率9600,无校验,8个数据位,1个停止位 m_ctrlComm.SetInputMode(1); // 1表示以二进制方式检取数据 m_ctrlComm.SetRThreshold(1); // 参数为1,表示每当串口接收缓冲区中有对于或等于一个字符时,将引发一个接收数据的OnComm事件 m_ctrlComm.SetInputLen(0); // 设置当前接收区数据长度为0 m_ctrlComm.GetInput(); // 先预读缓冲区以清除残留数据
2. 用COMBO BOX下拉框选择串口、波特率 m_cbPortSelect.ResetContent(); m_cbPortSelect.AddString(_T("COM1")); m_cbPortSelect.AddString(_T("COM2")); m_cbPortSelect.AddString(_T("COM3")); m_cbPortSelect.AddString(_T("COM4")); m_cbPortSelect.AddString(_T("COM5")); m_cbPortSelect.SetCurSel(3); m_cbPortRate.ResetContent(); m_cbPortRate.AddString(_T("1200")); m_cbPortRate.AddString(_T("2400")); m_cbPortRate.AddString(_T("4800")); m_cbPortRate.AddString(_T("9600")); m_cbPortRate.SetCurSel(0); 二.想动态地设置串口相关参数: CString str_setting; str_setting.Format(_T("%d, %c, %d, %d"), baud_num, 'n', 8, 1); m_ctrlComm.SetSettings(str_setting); // 设置波特率,校验位,数据位,停止位;m_ctrlComm是通信控件变量 想在Edit Box里显示实时值:
一般设置CAN_SJW = 1,总结程序发现!!! can时钟是RCC_APB1PeriphClock(APB1从APB2而来,分频系数不同,导致APB1不同,mini版中一般是APB2为72Mhz,APB1是36MHz),你要注意CAN时钟频率 CAN波特率= RCC_APB1PeriphClock/(1+CAN_BS1+CAN_BS2)/CAN_Prescaler ; 另外尽可能的把采样点设置为CiA 推荐的值: 75% when 波特率> 800K 80% when 波特率> 500K 87.5% when 波特率<= 500K 所以对于100K 的波特率(假定使用8MHz 时钟) 可以修改该BS1 BS2 为: CAN_InitStructure.CAN_Prescaler=5; CAN_InitStructure.CAN_BS1=CAN_BS1_13tq; CAN_InitStructure.CAN_BS2=CAN_BS2_2tq; (1+13) / (1+13+2) = 87.5% CAN波特率计算—网友总结 STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用. bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟:
APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的, 然后再看看有了APB1的时钟后,如何算CAN的总线速率, 先看下图: 有了上边的这个图,基本就清楚了. 总线时钟MHz (3+TS1+TS2)*(BRP+1) ===================================================下面是我的计算:
串口设置详解 本节主要讲解设置串口的主要方法。 如前所述,设置串口中最基本的包括波特率设置,校验位和停止位设置。串口的设置主 要是设置struct termios结构体的各成员值,如下所示: #include
52单片机串口波特率设置函数 波特率设置太麻烦了吧,用函数设置吧,不必东奔西走的找了,个人自己写的代码,欢迎使用,不需要金币,好用就评价一下吧 注意了,仅用于52系列单片机,代码如下: /*----------52单片机波特率设置函数-------------- ------------------------------------------------ 作者:wenguang.li Email:liwg@https://www.doczj.com/doc/6b365928.html,//wenguang.li@https://www.doczj.com/doc/6b365928.html, MCU: *52 Cristal frequency unit MHz 晶体频率单位MHz Baudrate as you desired Example: set52_baudrate(11.0592,57600) Use Timer2 使用定时器2 ------------------------------------------------ ----------------------------------------------*/ //if osc=11.0592M //can set baudrate 110,300,600,1200,2400,4800,9600,19200,38400,57600,115200bps void set52_baudrate(float frequency,long int baudrate) { unsigned int itmp; unsigned char tlow,thigh; itmp=(int)(65536-(frequency*1000000)/(baudrate*32)); thigh=itmp/256; tlow=itmp%256; SCON=0x56; T2CON=0x30; RCAP2H=thigh; RCAP2L=tlow; TH2=thigh; TL2=tlow; TR2=1; //set ok } /////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
路由器串口配置命令 https://www.doczj.com/doc/6b365928.html,2002-12-11保存本文推荐给好友QQ上看本站收藏本站 1. async mode 设置异步串口的建立链路方式。 async mode { dedicate | interactive } 【缺省情况】 异步串口的缺省建立链路方式为直接方式(dedicate)。 【命令模式】 串口配置模式 【使用指南】 异步串口可以有两种建立链路方式: 直接方式(Dedicate):拨号成功之后,直接采用链路层协议配置参数建立链路。 交互方式(Interactive):拨号成功之后,主叫方向对端发送配置命令(与用户从远端手工键入配置命令效果相同),设置对端的链路层协议工作参数,然后建立链路。 比较常用的是直接方式,但在与同样支持交互方式的路由器(如Cisco路由器等)互连时,采用交互方式显得更为灵活。 交互方式一般与外接Modem以及Modem Script共同使用。 【举例】 设置异步串口建立链路采用交互方式。 Quidway(config-if-Serial0)#async mode interactive 【相关命令】 modem,chat-script 2. baudrate 设置串口的波特率。
baudrate baudrate 【参数说明】 baudrate为串口的波特率,单位为bps,取值范围300~4096000。 【缺省情况】 异步串口的缺省波特率为9600bps,同步串口的缺省波特率为64kbps。 由于同异步支持的波特率范围不同,当进行同异步切换时,如果现工作方式不支持原波特率,则将波特率修改为现工作方式下的缺省波特率。 【命令模式】 串口配置模式 【使用指南】 异步串口支持的波特率有: 300bps 600bps 1200bps 4800bps 9600bps 19200bps 38400bps 57600bps 115200b 同步串口支持的波特率有: 1200bps 4800bps 9600bps 19200bps 38400bps 57600bps 115200bps 56000bps 64000bps 72000bps 128000bps
ZXR10设备串口线线序以及波特率 A:注意设置:选择正确的控制线,如果从超级终端登陆,在端口设置时,先选择恢复默认 值(数据位:8;奇偶校验:无;停止位:1;数据流控:无),再修改为对应的波特率即可 登陆。 1)E系列 (包括GAR/GER/T64E/T128)控制线两头都是DB9母头,线序如下: COMM口DB9 信号后台计算机DB9 信号 1 T232DCD 7 computerRTS 2 T232RX 3 computerTX 3 T232TX 2 computerRX 4 T232DTR 6 computerDSR 5 GND 5 GND 6 T232DSR 4 computerDTR 7 T232RTS 1 computerDCD 8 不接8 不接 9 T232RI 9 computerRI T64E/T128设置:9600.8.n.1 GAR/GER设置:115200.8.n.1 2)C系列 控制线两头都是DB9母头,使用直连方式,线序如下: CM板console DB9 后台计算机DB9 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 设置:9600.8.n.1 具体:
控制模块DB-9连接器(DCE)PIN码管理控制台DB-9连接器(PC) 未用 1 未用 TXD (传送数据) 2 RXD(接收数据) RXD (接收数据) 3 TXD(传送数据) 未用 4 未用 GND (接地) 5 GND(接地) DTR (数据终端完成) 6 DSR(数据设置完成) CTS (清除发送) 7 RTS(请求发送) RTS (请求发送) 8 CTS(清除发送) 未用9 未用 3)1816、2826/S 控制线连接设备一端是DB9公头,连接PC的一端是DB9母头,线序如下: CONSOLE DB9 信号后台计算机DB9 信号 1 DCD 7 RTS 2 RX 3 TX 3 TX 2 RX 4 DTR 6 DSR 5 GND 5 GND 6 DSR 4 DTR 7 RTS 1 DCD 8 不接8 不接 9 RI 9 RI 1816设置9600.8.n.1 2826s设置115200.8.n.1 4)3904 控制线连接设备一端是RJ45,连接PC一端是DB9母头(和思科通用),线序如下: Console RJ45 信号后台计算机DB9 信号 1 空空空 2 空空空 3 TXD 2 RXD 4 GND 5 GND 5 GND 5 GND 6 RXD 3 TXD 7 空空空 8 空空空 设置9600.8.n.1
s t m32_c a n波特率设 置指南
STM32的CAN波特率计算 STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用. bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟: APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的, 然后再看看有了APB1的时钟后,如何算CAN的总线速率, 先看下图: 有了上边的这个图,基本就清楚了. 总线时钟MHz (3+TS1+TS2)*(BRP+1) =================================================== 下面是我的计算: CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq; 注意//#define CAN_BS1_3tq ((uint8_t)0x02) /*!< 3 time quantum */ CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq; CAN_InitStructure.CAN_Prescaler = 4;//2 nominal bit time(3+5+1)tq=9tq 关于分频系数查看 system_stm32f10x.c下面的 static void SetSysClockTo72(void) 函数 /* HCLK = SYSCLK */ /* PCLK2 = HCLK */ /* PCLK1 = HCLK/2 */ 所以can时钟 72MHZ/2/4=9 Mhz tq=1/36Mhz 波特率为 1/nominal bit time= 9/9=1MHZ ========================================= ----------------------------------------------- ==================================================== void CAN_Configuration(void) { CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; /* CAN register init */ CAN_DeInit(); CAN_StructInit(&CAN_InitStructure); /* CAN cell init */ CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitStructure.CAN_ABOM=DISABLE;
如何修改凯立德端口号和波特率 很多朋友发帖说,自己下载安装凯立德软件或将原有的凯立德软件升级更新后,导航时搜索不到卫星了。这一问题一般是凯立德软件与导航仪的端口号和波特率不一致所致,此时,我们只需将端口号和波特率重新更改正确就行了 第一种方法: 本部分设定了隐藏,您已回复过了,以下是隐藏的内容 新打开一个记事本,自己将正确的端口号和波特率写入,例如: com port=1:冒号一定要保留 baundrate=4800 保存时将文件名改为NaviConfig.TXT即可。 第二种方法:下载一个UltraEdit工具软件,用它打开NaviOne.dll文件,点搜索查找,从31 3A 00 00,32 3A 00 00……一直到39 3A 00 00,查找到时,工具会显示出的,第一个双字符31就是com1,32就是com2……,余类推,直接修改为正确即可。 假如待查的NaviOne.dll的端口号是com5,我们逐一输入上述数据,如果与之不符的话,工具软件会提示未查到输入的数据,直到输入35 3A 00 00时,工具上才会显示出35 3A 00 00这一行数据,后排还会有一个提示com5。此时可直接将其修改为你所需要的数据即可。 波特率的查找和修改与上述方法一样。 波特率查找下面的字符: 4800: 4B 0D A0 03 9600: 96 0D A0 03 19200: 4B 0C A0 03 38400: 96 0C A0 03 57600: E1 0C A0 03 查找到时,工具也会显示出的,直接修改为正确即可。 第三种方法:该方法仅适用C系列800×480高清版本的。 首先,下载一个凯立德C系列800×480版本的的端口修改工具,我已上传到RayFile了,下面是地址: 本部分设定了隐藏,您已回复过了,以下是隐藏的内容 https://www.doczj.com/doc/6b365928.html,/files/a4f880a3-50d9-11df-a5ca-0015c55db73d/ 将压缩包解压后,得到一个凯立德图标,该图标即为凯立德端口修改工具。使用时,必须把凯立德端口修改工具和需要修改的文件放到同一目录下,由于凯立德的端口号和波特率在NaviOne.dll 文件中,因此,要把NaviOne.dll文件和修改工具放在一起。如下图: [attachm ent=17600] 下面为修改步骤: 1、点击凯立德端口修改工具,出现修改器画面。
串口基本配置命令 【命令】async mode { protocol | flow | tty | printer | posapp | pos id } 【视图】异步串口视图、AUX 接口视图 【参数】protocol:协议模式。指物理连接建立之后,接口直接采用已有的链路层协 议配置参数建立链路。flow:流模式,也称交互模式。指物理连接建立之后,链路的两端进行交互,主叫端向接收端发送配置命令(与用户从远端手工键入配置命令效果相同),设置接收端的链路层协议工作参数,然后建立链路。一般用于拨号等人机交互的情况下。tty:终端接入方式。当路由器的异步串口用于终端接入服务时,通过此关键字以及相应参数来设置待接入的物理终端和虚终端(VTY)号。 【描述】async mode 命令用来设置异步串口的工作方式。缺省情况下,异步串口工作在协议方式(protocol 方式),AUX 接口缺省工作在流方式(flow)。 【举例】# 设置异步串口工作在流方式。 [Quidway-Serial0]async mode flow 【命令】baudrate baudrate 【视图】串口视图 【参数】baudrate:串口的波特率,单位为bps。对于异步串口取值范围为300~115200,对于同步串口取值范围为1200~2048000。 【描述】baudrate 命令用来设置串口的波特率。缺省情况下,异步串口的缺省波特率为9600 bps,同步串口的缺省波特率为64000 bps。 异步串口支持的波特率有:300 bps、600 bps、1200 bps、2400 bps、4800 bps、9600 bps、19200 bps、38400 bps、57600 bps、115200 bps。 同步串口支持的波特率有:1200 bps、2400 bps、4800 bps、9600 bps、19200 bps、38400 bps、57600bps、64000 bps、72000 bps、115200 bps、128000 bps、384000 bps、2048000bps。 另外同步串口对于不同的物理电气规程,所支持的波特率范围有所不同。 &<048698;&O1472;V.24 DTE/DCE:1200 bps~64000 bps &<048698;&O1472;V.35 DCE/DCE、X.21 DTE/DCE、EIA/TIA-449 DTE/DCE 以及EIA-530 DTE/DCE:1200 bps~2048000 bps 当同/异步串口进行同异步切换时,接口的波特率将恢复为新工作方式下的缺省波特率。 在设置串口波特率时,要注意串口的同异步方式以及外接电缆的电气规程等因素。另外要注意异步串口的波特率只在路由器与Modem 之间起作用,两台Modem 之间的波特率则由它们互相协商确定,因此在异步方式下两端路由器的波特率设置可以不一致;在同步方式下,由DCE 侧路由器决定线路传输的波特率,只需在DCE 侧设定即可。 【举例】# 设置异步串口的波特率为115200 bps。 [Quidway-Serial0]baudrate 115200 【命令】clock { dceclk | dteclk1 | dteclk2 | dteclk3 | dteclk4 } 【视图】串口视图 【参数】无 【描述】clock 命令用来设置同步串口的时钟选择方式。缺省情况下,作为DCE 设备的情况,为DCEclk (即向DTE 设备提供时钟);作为DTE 设备的情况,为DTEclk3。同步串口有两种工作方式:DTE 和DCE。不同的工作方式有不同的时钟选择。如果同步串口作为DCE 设备,需要向对端DTE 设备提供时钟,这时需要选择DCEclk;如果同步串口作为DTE 设备接受对端DCE 设备提供的时钟,由于同步设备的接收和发送时钟是独立的,则DTE 设备的接收时钟可以选择DCE 设备的发送或接收时钟,而且DTE 设备的发送时钟也可以选择DCE 设备的发送或接收时钟,产生四种组合,即在DTE 侧可以有四种时钟选择。 【举例】# 设置同步串口作为DTE 设备的时钟选择方式为DTEclk2。 [Quidway-Serial0]clock dteclk2
一、设置输出、接收引脚 PA9 PA10 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;//定义一个USART结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置端口速度 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 (Rx输出口) GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA.10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入(Tx接收口) GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA10 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能USART1时钟 二、设置USART结构体成员参数 USART_https://www.doczj.com/doc/6b365928.html,ART_BaudRate = 115200; //设置串口波特率 USART_https://www.doczj.com/doc/6b365928.html,ART_WordLength = USART_WordLength_8b; //设置传输字节长度 USART_https://www.doczj.com/doc/6b365928.html,ART_StopBits = USART_StopBits_1; //设置停止位USART_StopBits_1 ((uint16_t)0x0000) 停止位为1位 USART_StopBits_0_5 ((uint16_t)0x1000) 停止位为0.5位 USART_StopBits_2 ((uint16_t)0x2000) 停止位为2位 USART_StopBits_1_5 ((uint16_t)0x3000) 停止位为1.5位
T2_BTL28800: ;用T2作波特率发生器的初始化设置 MOV 98H,#01100011B ;98H=SCON 仿真P89C664时不识别SCON ; MOV SCON,#01100011B ;串行口工作为方式1,位9(停止位)必须为1接收才有效,发送位9预设为1(方式1时自动设置) ;TI=1为不用定时器1作波特率用定时器2(位TI位未理解清楚)LI=1 MOV PCON,#00000000B ;波特率不加倍 ;MOV PCON,#10000000B ;波特率加倍 MOV T2MOD,#00000000B ;定时不输出 MOV T2CON,#00110100B ;T2用做发送接收时钟,置RCLK接收时钟与TCLK发送时钟,TR2=1启动T2,定时且自动重装 MOV RCAP2H,#0FFH ;12M 8052 MOV RCAP2L,#LOW(0FFFFH-13) ;12M ;MOV RCAP2L,#LOW(0FFFFH-(13*2)) ;24M ; CLR TR2 ;仿真P89C664时不识别TR2 CLR T2CON.2 ;TR2 ;仿真P89C664时不识别TR2 MOV TH2,#0FFH ;12M 8052 MOV TL2,#LOW(0FFFFH-13) ;12M ;MOV TL2,#LOW(0FFFFH-(13*2)) ;24M ; SETB TR2 ;仿真P89C664时不识别TR2 SETB T2CON.2 ;TR2 ;仿真P89C664时不识别TR2 RET ;T2计算公式:;12M/(32*(65536-(RCAP2H,RCAP2L)))=28800 8051式 ; ( 13 ) 78 ;=================================== ;T1_BTL4800: ;用T1作波特率发生器的初始化设置 ; MOV SCON,#01101000B ;串行口工作为方式1,位9(停止位)必须为1接收才有效,发送位9预设为1(方式1时自动设置) ;(位TI位未理解清楚) ; MOV PCON,#00000000B ;波特率不加倍 ; MOV TMOD,#00100000B ;T1工作于方式2为8位重装 ; MOV TH1,#0F9H ; MOV TL1,#0F9H ; RET ;SCON 串行通信控制寄存器 ; D7 D6 D5 D4 D3 D2 D1 D0
1. 属性描述 串口属于终端设备,其接口属性用termios结构描述,如程序清单13.9所示。 程序清单13.9termios结构 struct termios { tcflag_t c_cflag/* 控制标志*/ tcflag_t c_iflag;/* 输入标志*/ tcflag_t c_oflag;/* 输出标志*/ tcflag_t c_lflag;/* 本地标志*/ tcflag_t c_cc[NCCS];/* 控制字符*/ }; 粗略而言,控制标志影响到RS-232串行线(如:忽略调制解调器的状态线、每个字符需要一个或两个停止位等),输入标志由终端设备驱动程序用来控制字符的输入(如:剥除输入字节的第8位,允许输入奇偶校验等),输出控制则控制驱动程序输出(如:执行输出处理、将换行符映射为CR/LF等),本地标志影响驱动程序和用户之间的接口(如:本地回显的开和关等),c_cc数组则包含了所有可以更改的特殊字符。 (1)控制标志 c_cflag成员控制着波特率、数据位、奇偶校验、停止位以及流控制,表13.4列出了c_cflag 可用的部分选项。 表13.4c_cflag部分可用选项 标志说明标志说明 CBAUD 波特率位屏蔽CSIZE 数据位屏蔽 B0 0位/秒(挂起)CS5 5位数据位 B110 100位/秒CS6 6位数据位 B134 134位/秒CS7 7位数据位 B1200 1200位/秒CS8 8位数据位 B2400 2400位/秒CSTOPB 2位停止位,否则为1位 B4800 4800位/秒CREAD 启动接收 B9600 9600位/秒PARENB 进行奇偶校验 B19200 19200位/秒PARODD 奇校验,否则为偶校验 B57600 57600位/秒HUPCL 最后关闭时断开 B115200 115200位/秒CLOCAL 忽略调制调解器状态行 B460800 460800位/秒—— c_cflag成员的CREAD和CLOCAL选项通常是要启用的,这两个选项使驱动程序启动接收字符装置,同时忽略串口信号线的状态。 (2)输入标志 c_iflag成员负责控制串口输入数据的处理,表13.5所示是c_iflag的部分可用标志。 表13.5c_iflag标志 .标志说明 INPCK 打开输入奇偶校验 IGNPAR 忽略奇偶错字符 PARMRK 标记奇偶错 ISTRIP 剥除字符第8位