爆肝9万字,我已从小白晋升ARM嵌入式工程师!带你从零熟悉常用的M4嵌入式功能,建议收藏(含码源)(2)

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 什么是中断?中断就是CPU在正常运行程序的时候,由于内部或者外部事件引起的暂时中止现行的程序,转去执行请求CPU为其服务的那个外设或者事件的服务程序,等待这个服务程序执行完毕又要返回到被中止的地方的程序,这么的一个过程。

3、中断实验

3.1中断简介

3.1.1中断概念

什么是中断?中断就是CPU在正常运行程序的时候,由于内部或者外部事件引起的暂时中止现行的程序,转去执行请求CPU为其服务的那个外设或者事件的服务程序,等待这个服务程序执行完毕又要返回到被中止的地方的程序,这么的一个过程。我,们可以根据一下的流程图进行一下描述:

2345_image_file_copy_45.jpg

中断执行流程图

中断指的很简单,指的是在我们的CPU执行正常的程序的时候,由于外部或者内部事件或由程序预先安排的事件,引起的CPU中断正在运行的程序,而转到为外部或内部事件有程序预先安排的事件服务的程序中去,服务完毕,再返回到执行暂时中断的程序。

3.1.2 中断意义

中断,程序设计中占着非常重要的地位。如果没有中断,则CPU的工作效率会大折扣。就像我们的UART模块中,接收电脑发送来的数据,使用了while(查询标志)(查询状态的方式,如果电脑没有发送数据,则程序会一直阻塞,使CPU做不了其他事情。如果有一种机制,不用CPU循环查询是否有数据到来,而是硬件自动接收数据,当收到数据时候的自动通知CPU,这时候CPU再去把数据读取出来。这样,在没有数据接收到前,CPU可以去做其他事情,工作效率自然就提高了。在CPU 硬件中,通过中断这种机制来实现这个功能,每个片上外设硬件都提供一个中断信号,当模块处理特定工作状态时,会发出中断信号通信CPU。

3.2 STM32的中断

3.2.1 STM32中断的特性

  • Cortex-M4内部包含有嵌套向量中断控制器
  • 与内核紧密联系的中断控制器,可支持低中断延时
  • 可对系统异常和外设中断进行控制

16个可编程的优先等级(使用了4位中断优先级)

82个可屏藏中断通道:可重定位的向量表

  • 不可屏蔽中断
  • 软件中断功能

 嵌套向量中断控制器(NIC)是Cortex-M4 的一个内部器件。与CPU紧密结合,降低中断延时,让新进中断可以得到高效处理。

 Cortes-M3核心的中断实现是通过嵌入一个NVIC控制器,该控制器功能非常强大。在中断处理上效率很高,优先级配置也很灵活;

3.2.2 NVIC控制器的优先级表示

NVIC控制器的优先级使用8个二进制位表示,分成两部分进行表示,分别是抢占优先级以及响应优先级。

  • 抢占优先级:含义是在不同的等级之间的中断可以相互嵌套,高优先级可以中断低优先级,数字小的优先级高;
  • 响应优先级:含义是不同的响应优先级的中断不可以相互嵌套,但是当响应优先级相同的时候,响应优先级不同,多个中断源同时发生中断的时候,响应优先级高的中断事件可以优先响应,数字小的响应的优先级越高。
  • 自然优先级:就是我们的NVIC控制器的中断源编号,数字小的优先级高。作用是:当抢占优先级和响应优先级相同且都发生了中断的时候,自然优先级高的优先响应,数字小的优先级高。
  • 优先级等级小结:抢占优先级>响应优先级>自然优先级,抢占优先级决定了是否可以嵌套,响应优先级和自然优先级决定发生的时候,先响应哪一个(如果抢占相同,就比较我们的响应优先级,两个都相同的话,那就比较我们的自然优先级,自然优先级是我们厂家生产出来的时候已经决定好的了!)

 STM32F10x把指定的中断优先级的寄存器位用了4个位,这四个寄存器位的分组方式可以如下:

image.png

要配置分组的话,按照上面的这个表格,要将PRIGROUP列的值写到我们的AIRCR[10:8]当中,一个程序只有一个分组,当分组确定的时候,那个其中的响应优先级和抢占优先级也就确定了!

3.3 中断向量表

image.png

image.png

3.4 STM32中断编程

我们知道由于我们的NVIC是一个属于内核级别的外设,我们所有的厂家的芯片在寄存器上面都是一样的,所以配置方法以及配置后的作用都是一样的。所以ARM公司已经给我们提供了一份通用的NVIC的配置函数,我们只需要弄清楚他们的作用以及使用方法就可以了!

3.4.1 NVIC分组设置

voidNVIC_SetPriorutyGrouping(uint32_tPriorityGroup),

PriorityGroup:分组方式对应的值,0-7组我们前面已经说了,简单的例子就是比如你选择的是第二组,那么就是2位的抢占优先级,那么对应的值就是7-2=5;我们设置分组2的方式,

NVIC_SetPriorutyGrouping(7-2);AIRCR[10:8] .

3.4.2 NVIC优先级编码

uint32_t NVIC_EncodePriority(uint32_tPriorutyGroup,uint32_tPreempPriority,uint32_tSubPRiority);

我们这个函数把分组方式,抢占优先级,子优先级数值编码成一个32位的数字,作为我们的返回值返回。

PriorutyGroup:分组方式对应的值,也就是AIRCR[10:8]中的值,或者也可以说是

NVIC_SetPriorityGrouuping函数的参数。

PreemptPriority:正确的抢占优先级值,比如分组2,范围是0~3取值,SubPriority:正确的子优先级值,比如分组2,范围是0~3取值,

说明:这个函数并没有把优先级设置到寄存器中,只是简单的合成一个表示优先级数字。后面再使用其他数设置这个值到寄存器中。

可以使用移位方式配置优先级。但是配置上比较麻烦。

Pri=NWIC_EncodePriority(7-2,1,3);→分组2,抢占优先级是1,响应优先级是3。返回编码后的值,个值就是写入对应中断源中断寄存器中的值。这个函数并没有写入寄存器中。

3.4.3 NVIC优先级配置

void NVIC_SetPriority(lRQn_TypeIRQn,uint32_tpriority)该函数用于设置指定中断源的中断优先级。

IRQn_Type是在 stm32F10x.h文件中有定义,一个枚举类型,定义了STM32F10x芯片对应所有的中断源编引IRQn:中断源编号;

priority:中断优先级,就是使用NIC_EncodePriority()函数编码的返回值。Pri=NVIC_EncodePriority(7-2,1.3);    //USART1__IRQn=37,

NVIC_SetPriority(USART1_IRQn,Pri);  //设置串口1的中断优先级。

3.4.4 NVIC中断使能

中断使能也是由NVIC控制器控制的。

0xE000_E100 - 0xE000_E11C这个地址范围的奇存器是用来配置中断使能。一个中断源只要一个位。

一个寄存器是32位。总共有8个寄存器,位数是32*8=256.

下图最后一个寄存器SETENA7管224~239号中断。共15+1=16个中断。前面的都是管32个。原因是SETENA0~SETENA7只能用于使能厂家的外扩的中断源。不用于管理Cortex-M3核心占用的前16个中断。

比如:STM32F103的USARTI中断使能,就要配置SETENA1[3]位为l,其他中断类似。void NVIC_EnableIRQ(IRQn_TypeIRQn)

该函数用于使能指定中断源。//使能串口中断

2345_image_file_copy_46.jpg

3.4.5 初始化NVIC控制器的步骤

1.设置分组方式

2.确定中断源的抢占优先级和响应优先级,使用NVIC_EncodePriority函数进行编码

3.把上下编码得到优先级值写入优先级配置寄存器,使用NVIC_SetPriority函数。

4使能对应中断源,使用NVIC_EnableIRQ函数。

5.具体的模块中断:还要去配置外设中断相关的寄存器(下小节会以外部中断以例子讲解)

6.编写中断服务函数:

1)到启动代码中找到对应的中断入口,以确定中断函数名字;

2)在C文件中编写一个无返回值,无类型的函数。函数名就是上一步得到的名字。

3.4.6 中断服务函数编写

比如我们要编写一个中断服务函数的话,我们直接到你工程的启动文件就可以将这个函数的命名复制下来,千万别自己手动敲;

2345_image_file_copy_47.jpg

例如我们编写一个EXTI线0的中断服务函数;我们直接到我们的启动文件找到我们的相应的函数名复制下来就可以了:

2345_image_file_copy_48.jpg

函数的编写格式如下:

void EXTI0_IRQHandler(void)
{
你想要编写实现的内容:()
}

我们写一个中断按键控制灯的,我们就可以这样子写;

void EXTI0_IRQHandler(void)
{
  EXTI_ClearITPendingBit(EXTI_Line0);  //清除外部中断0标志位
  led1= !led1;
}

注意:这里说明一下,我们的中断服务函数在编写内容上面和我们的普通代码没有什么太大的区别,大家可以根据自己的需要编写功能代码,只有里面一定要有清除中断标志位的代码就可以了。中断服务函数名要和我们的启动文件对应的中断源的中断入口标志相同。并且还是需要原型为voidfun(void).

4.UART和USART

4.1 UART简介

 我们的串行接口指的是数据一位一位的顺序传输传送过去,它的特点就是通信的线路简单,只要有一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大的降低了成本,特别是在我们的远距离通信,但是传输的速度很慢。

 一条信息的个位数据被逐位按顺序传送的通讯方式成为串行通讯。该通讯的特点是:数据位的传送是按位进行的,最少只需要一条数据线就可以完成;成本比较低但是速度很慢。串行通讯的距离一般可以从机密到几千米;我们根据数据的传输方向,串行通讯可以分成三种--单工、半双工、全双工;

  • 单工:只有一个方向的数据传输;
  • 半双工:数据可以在一个信号的载体上的两个方向传输,不是不可以进行到同时的传输,数据线分为复用;
  • 全双工:双向的数据传输;允许数据在两个方向上面的同时传输,他在能力上相当于两个但施工的结合。

重点来了:

UART(universal asynchronous receiver transmitter),我们指的是异步串行,universal asynchronous receiver transmitter(通用异步接收发送)。在这里UART是一个并行输入成为串行输入的芯片,通常会集成在我们的板载上面。

 UART包含TLT电平(电平为3.3V)的串口和RS232电平(负逻辑电平:+5-12v低电平;-12-5位高电平)的串口。

4.2 USART

 通用同步异步接受发送控制器,是一套提供了灵活的方法与使用工业标准NRZ异步创新数据格式的外部设备之间进行全双工数据交换。USART利用分数串列传输速率发生器提供宽范围的串列传输速率选择。它支持同步单线通信和半双工单线通信,也支持局部联网,智能卡协议和红外数据组织以及调制解调器操作,还允许多个处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。

 我们接口通过的是三个引脚和其他的设备链接到一起,任何的USART双向通信至少都要两个引脚:接收数据输入(RX)和发送数据输出(TX);

RX:接收数据输入。通过采样技术来区别数据和噪音,从而恢复数据;

TX:发送数据输出。当发送器被禁止的时候,输出引脚恢复到它的I/O端口配置。当发送器激活的时候,并且不发送数据的时候,TX引脚处于高电平。

  • 总线在发送或者接收前处于空闲状态;
  • 一个起始位;
  • 一个8或9位的书局字,最低有效位在前;
  • 0.5、1.5、2个停止位,由此表明数据帧结束;
  • 使用分数波特率发生器--12位整数和4位小数;
  • 一个状态寄存器(USART_SR);
  • 数据寄存器(USART_DR);
  • 一个波特率寄存器(USART_BRR),12位整数和4位小数;
  • 一个智能卡模式下的保护时间寄存器(USART_GTPR)。

4.3 UART特性

  • 字节可以通过编程USART——CR1寄存器中的M位,选择成8或者9位。在其实期间,TX脚处于低电平,在停止位期间处于高电平;
  • 空闲符号被视为完全有‘1’组成的一个完整的数据帧,后面跟着包含的下一个帧烦人开始为(‘1’的位数也包括了定制为的位数);
  • 断开符号  被视为在一个帧周期全部收到“0”包括停止位,也是“0”。在断开帧结束的时候,发送器再插入1或2个停止位(‘1’)来应答起始位;在断开帧结束时,发送器再插入1或2停止位(‘1’)来应答起始位;
  • 发送和接收由一个用的波特率发生器驱动,当发送器和接收器的使能位分别置位的时候,分别为其产生时钟。
  • 2345_image_file_copy_49.jpg

4.4 串口如何工作

串口的工作有两种方式:查询和中断;

查询:串口程序不断的循环查询,查看当前有没有数据要他传送,有的话,就帮它传送(可以从PC端到STM32板子传送,也可以从STM32板子到PC端);

中断:当串口打开中断时,如果发现有一个数据到来或数据发送完毕,则会发生中断,就以为着它帮助传输数据--它就马上进行数据的传送。同时,可以从PC机到STM32F4板子,也可以从STM32F4板子到PC端!

2345_image_file_copy_50.jpg

字节设置

2345_image_file_copy_51.jpg

配置停止位

波特率的产生

接收器和发送器的波特率在UASRTDIV的整数和小数寄存器中的值应设置成相同。这里的FCK是给外设的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1)。USARTDIV是一个无符号的定点数。这12位的值设置在USART_BRR寄存器。方图如下:

2345_image_file_copy_52.jpg

USART系统框架图

4.5 与UART相关的寄存器

  4.5.1 状态寄存器(USART_SR)

2345_image_file_copy_53.jpg

位 9 CTS:CTS 标志 (CTS flag)

 如果 CTSE 位置 1,当 nCTS 输入变换时,此位由硬件置 1。通过软件将该位清零(通过向该位中写入 0)。如果 USART_CR3 寄存器中 CTSIE=1,则会生成中断。

0:nCTS 状态线上未发生变化

1:nCTS 状态线上发生变化

注意:该位不适用于 UART4 和 UART5。

位 8 LBD:LIN 断路检测标志 (LIN break detection flag)

检测到 LIN 断路时,该位由硬件置 1。通过软件将该位清零(通过向该位中写入 0)。如果

USART_CR2 寄存器中 LBDIE = 1,则会生成中断。

0:未检测到 LIN 断路

1:检测到 LIN 断路

注意:如果 LBDIE=1,则当 LBD=1 时生成中断

位 7 TXE:发送数据寄存器为空 (Transmit data register empty)

当 TDR 寄存器的内容已传输到移位寄存器时,该位由硬件置 1。如果 USART_CR1 寄存器中 TXEIE 位 = 1,则会生成中断。通过对 USART_DR 寄存器执行写入操作将该位清零。

0:数据未传输到移位寄存器

1:数据传输到移位寄存器

注意:单缓冲区发送期间使用该位

位 6 TC:发送完成 (Transmission complete)

如果已完成对包含数据的帧的发送并且 TXE 置 1,则该位由硬件置 1。如果 USART_CR1 寄存器中 TCIE = 1,则会生成中断。该位由软件序列清零(读取 USART_SR 寄存器,然后写入USART_DR 寄存器)。TC 位也可以通过向该位写入‘0’来清零。建议仅在多缓冲区通信

时使用此清零序列。

0:传送未完成

1:传送已完成

位 5 RXNE:读取数据寄存器不为空 (Read data register not empty)

当 RDR 移位寄存器的内容已传输到 USART_DR 寄存器时,该位由硬件置 1。如果

USART_CR1 寄存器中 RXNEIE = 1,则会生成中断。通过对 USART_DR 寄存器执行读入

操作将该位清零。RXNE 标志也可以通过向该位写入零来清零。建议仅在多缓冲区通信时使用此清零序列。

0:未接收到数据

1:已准备好读取接收到的数据

位 4 IDLE:检测到空闲线路 (IDLE line detected)

检测到空闲线路时,该位由硬件置 1。如果 USART_CR1 寄存器中 IDLEIE = 1,则会生成中断。该位由软件序列清零(读入 USART_SR 寄存器,然后读入 USART_DR 寄存器)。

0:未检测到空闲线路

1:检测到空闲线路

注意:直到 RXNE 位本身已置 1 时(即,当出现新的空闲线路时)IDLE 位才会被再次置 1。

位 3 ORE:上溢错误 (Overrun error)

在 RXNE = 1 的情况下,当移位寄存器中当前正在接收的字准备好传输到 RDR 寄存器时,该位由硬件置 1。如果 USART_CR1 寄存器中 RXNEIE = 1,则会生成中断。该位由软件序列清零(读入 USART_SR 寄存器,然后读入 USART_DR 寄存器)。

0:无上溢错误

1:检测到上溢错误

注意:当该位置 1 时,RDR 寄存器的内容不会丢失,但移位寄存器会被覆盖。如果 EIE 位置 1,则在进行多缓冲区通信时会对 ORE 标志生成一个中断。

位 2 NF:检测到噪声标志 (Noise detected flag)

当在接收的帧上检测到噪声时,该位由硬件置 1。该位由软件序列清零(读入 USART_SR 寄存器,然后读入 USART_DR 寄存器)。

0:未检测到噪声

1:检测到噪声

注意:如果 EIE 位置 1,则在进行多缓冲区通信时,该位不会生成中断,因为该位出现的时间与本身生成中断的 RXNE 位因 NF 标志而生成的时间相同。

注意:当线路无噪声时,可以通过将 ONEBIT 位编程为 1 提高 USART 对偏差的容差来禁止

位 1 FE:帧错误 (Framing error)

当检测到去同步化、过度的噪声或中断字符时,该位由硬件置 1。该位由软件序列清零(读入USART_SR 寄存器,然后读入 USART_DR 寄存器)。

0:未检测到帧错误

1:检测到帧错误或中断字符

注意:该位不会生成中断,因为该位出现的时间与本身生成中断的 RXNE 位出现的时间相同。

如果当前正在传输的字同时导致帧错误和上溢错误,则会传输该字,且仅有 ORE 位被

置 1。

如果 EIE 位置 1,则在进行多缓冲区通信时会对 FE 标志生成一个中断。

位 0 PE:奇偶校验错误 (Parity error)

当在接收器模式下发生奇偶校验错误时,该位由硬件置 1。该位由软件序列清零(读取状态寄存器,然后对 USART_DR 数据寄存器执行读或写访问)。将 PE 位清零前软件必须等待RXNE 标志被置 1。

如果 USART_CR1 寄存器中 PEIE = 1,则会生成中断。

0:无奇偶校验错误

1:奇偶校验错误

4.5.2 数据寄存器(USART_DR)

2345_image_file_copy_54.jpg

位 8:0 DR[8:0]:数据值

包含接收到数据字符或已发送的数据字符,具体取决于所执行的操作是“读取”操作还是

“写入”操作。

因为数据寄存器包含两个寄存器,一个用于发送 (TDR),一个用于接收 (RDR),因此它具有双重功能(读和写)。

TDR 寄存器在内部总线和输出移位寄存器之间提供了并行接口(参见图 1)。

RDR 寄存器在输入移位寄存器和内部总线之间提供了并行接口。

在使能奇偶校验位的情况下(USART_CR1 寄存器中的 PCE 位被置 1)进行发送时,由于

MSB 的写入值(位 7 或位 8,具体取决于数据长度)会被奇偶校验位所取代,因此该值不起任何作用。

在使能奇偶校验位的情况下进行接收时,从 MSB 位中读取的值为接收到的奇偶校验位。

4.5.3 波特率寄存器(USART_BRR)

2345_image_file_copy_55.jpg

位 31:16 保留,必须保持复位值 ;位 15:4 DIV_Mantissa[11:0]:USARTDIV 的尾数

这 12 个位用于定义 USART 除数 (USARTDIV) 的尾数

位 3:0 DIV_Fraction[3:0]:USARTDIV 的小数;

这 4 个位用于定义 USART 除数 (USARTDIV) 的小数。当 OVER8 = 1 时,不考虑 DIV_Fraction3位,且必须将该位保持清零。

4.5.4 控制寄存器(USART_CR1)

2345_image_file_copy_56.jpg

位 31:16 保留,必须保持复位值

位 15 OVER8:过采样模式 (Oversampling mode)

0:16 倍过采样

1:8 倍过采样

注意:8 倍过采样在智能卡、IrDA LIN 模式下不可用:当 SCEN=1IREN=1 LINEN=1 时,

OVER8 由硬件强制清零。

位 14 保留,必须保持复位值

位 13 UE:USART 使能 (USART enable)

该位清零后,USART 预分频器和输出将停止,并会结束当前字节传输以降低功耗。此位由软件置 1 和清零。

0:禁止 USART 预分频器和输出

1:使能 USART

位 12 M:字长 (Word length)

该位决定了字长。该位由软件置 1 或清零。

0:1 起始位,8 数据位,n 停止位

1:1 起始位,9 数据位,n 停止位

注意:在数据传输(发送和接收)期间不得更改 M

位 11 WAKE:唤醒方法 (Wakeup method)

该位决定了 USART 唤醒方法,该位由软件置 1 或清零。

0:空闲线路

1:地址标记

位 10 PCE:奇偶校验控制使能 (Parity control enable)

该位选择硬件奇偶校验控制(生成和检测)。使能奇偶校验控制时,计算出的奇偶校验位被

插入到 MSB 位置(如果 M=1,则为第 9 位;如果 M=0,则为第 8 位),并对接收到的数据

检查奇偶校验位。此位由软件置 1 和清零。一旦该位置 1,PCE 在当前字节的后面处于活动状态(在接收和发送时)。

0:禁止奇偶校验控制

1:使能奇偶校验控制

位 9 PS:奇偶校验选择 (Parity selection)

该位用于在使能奇偶校验生成/检测(PCE 位置 1)时选择奇校验或偶校验。该位由软件置 1 和

清零。将在当前字节的后面选择奇偶校验。

0:偶校验

1:奇校验

位 8 PEIE:PE 中断使能 (PE interrupt enable)

此位由软件置 1 和清零。

0:禁止中断

1:当 USART_SR 寄存器中 PE=1 时,生成 USART 中断

位 7 TXEIE:TXE 中断使能 (TXE interrupt enable)

此位由软件置 1 和清零。

0:禁止中断

1:当 USART_SR 寄存器中 TXE=1 时,生成 USART 中断。

位 6 TCIE:传送完成中断使能 (Transmission complete interrupt enable)

此位由软件置 1 和清零。

0:禁止中断

1:当 USART_SR 寄存器中 TC=1 时,生成 USART 中断

位 5 RXNEIE:RXNE 中断使能 (RXNE interrupt enable)

此位由软件置 1 和清零。

0:禁止中断

1:当 USART_SR 寄存器中 ORE=1 或 RXNE=1 时,生成 USART 中断

位 4 IDLEIE:IDLE 中断使能 (IDLE interrupt enable)

此位由软件置 1 和清零。

0:禁止中断

1:当 USART_SR 寄存器中 IDLE=1 时,生成 USART 中断

位 3 TE:发送器使能 (Transmitter enable)

该位使能发送器。该位由软件置 1 和清零。

0:禁止发送器

1:使能发送器

注意:1:除了在智能卡模式下以外,传送期间 TE 位上的“0”脉冲(“0”后紧跟的是“1”)

会在当前字的后面发送一个报头(空闲线路)。

2:当 TE 1 时,在发送开始前存在 1 位的时间延迟。

位 2 RE:接收器使能 (Receiver enable)

该位使能接收器。该位由软件置 1 和清零。

0:禁止接收器

1:使能接收器并开始搜索起始位

位 1 RWU:接收器唤醒 (Receiver wakeup)

该位决定 USART 是否处于静音模式。该位由软件置 1 和清零,并可在识别出唤醒序列时由硬

件清零。

0:接收器处于活动模式

1:接收器处于静音模式

注意:1:选择静音模式前(通过将 RWU 位置 1),USART 必须首先接收一个数据字节,否则

当由空闲线路检测到唤醒时,它无法于静音模式下正常工作。

2:在地址标记检测唤醒配置(WAKE = 1)中,RXNE 位置 1 时,RWU 位不能由软件

进行修改。

位 0 SBK:发送断路 (Send break)

该位用于发送断路字符。该位可由软件置 1 和清零。该位应由软件置 1,并在断路停止位期间

由硬件重置。

0:不发送断路字符

1:将发送断路字符

4.5.5 控制寄存器(USART_CR2)

2345_image_file_copy_57.jpg

位 31:15 保留,必须保持复位值

位 14 LINEN:LIN 模式使能 (LIN mode enable)

此位由软件置 1 和清零。

0:禁止 LIN 模式

1:使能 LIN 模式

LIN 模式可以使用 USART_CR1 寄存器中的 SBK 位发送 LIN 同步断路(13 个低位),并可检测 LIN

同步断路。

位 13:12 STOP:停止位 (STOP bit)

这些位用于编程停止位。

00:1 个停止位

01:0.5 个停止位

10:2 个停止位

11:1.5 个停止位

注意:0.5 个停止位和 1.5 个停止位不适用于 UART4 UART5

位 11 CLKEN:时钟使能 (Clock enable)

该位允许用户使能 SCLK 引脚。

0:禁止 SCLK 引脚

1:使能 SCLK 引脚

该位不适用于 UART4 UART5

位 10 CPOL:时钟极性 (Clock polarity)

该位允许用户在同步模式下选择 SCLK 引脚上时钟输出的极性。它与 CPHA 位结合使用可获得所需的时钟/数据关系

0:空闲时 SCLK 引脚为低电平。

1:空闲时 SCLK 引脚为高电平。

该位不适用于 UART4 UART5

位 9 CPHA:时钟相位

该位允许用户在同步模式下选择 SCLK 引脚上时钟输出的相位。它与 CPOL 位结合使用可获得所需

的时钟/数据关系(请参见图258 259

0:在时钟第一个变化沿捕获数据

1:在时钟第二个变化沿捕获数据

注意:该位不适用于 UART4 UART5

位 8 LBCL:最后一个位时钟脉冲 (Last bit clock pulse)

该位允许用户在同步模式下选择与发送的最后一个数据位 (MSB) 关联的时钟脉冲是否必须在 SCLK

引脚上输出。

0:最后一个数据位的时钟脉冲不在 SCLK 引脚上输出

1:最后一个数据位的时钟脉冲在 SCLK 引脚上输出

注意:1:最后一位为发送的第 8 或第 9 个数据位,具体取决于 USART_CR1 寄存器中 M 位所选择的

8 位或 9 位格式。

2:该位不适用于 UART4 UART5

位 7 保留,必须保持复位值

位 6 LBDIE:LIN 断路检测中断使能 (LIN break detection interrupt enable)

断路中断屏蔽(使用断路分隔符进行断路检测)

0:禁止中断

1:当 USART_SR 寄存器中 LBD = 1 时,生成中断

位 5 LBDLlin 断路检测长度 (lin break detection length)

该位用于选择 11 位断路检测或 10 位断路检测。

0:10 位断路检测

1:11 位断路检测

位 4 保留,必须保持复位值

位 3:0 ADD[3:0]:USART 节点的地址

该位域用于指定 USART 节点的地址。

将在多处理器通信时于静音模式下使用该位域,以通过地址标记检测进行唤醒。

注意: 使能发送器时不应对这 3 个位(CPOLCPHALBCL)进行写操作。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
25天前
|
数据处理
基于ARM的嵌入式原理与应用:ALU的功能与特点
基于ARM的嵌入式原理与应用:ALU的功能与特点
|
5月前
|
存储 Ubuntu 编译器
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
|
5月前
|
Ubuntu Unix Linux
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(一)
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(一)
|
5月前
|
Linux 编译器 语音技术
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(二)
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(二)
|
4月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
|
5月前
|
存储 算法 Linux
详细解读ARM嵌入式整理
详细解读ARM嵌入式整理
33 0
|
6月前
|
安全 Unix Linux
【ARM】在NUC977上搭建基于boa的嵌入式web服务器
【ARM】在NUC977上搭建基于boa的嵌入式web服务器
174 0
|
23天前
|
编解码 弹性计算 应用服务中间件
阿里云服务器Arm计算架构解析:Arm计算架构云服务器租用收费标准价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中Arm计算架构以其低功耗、高效率的特点受到广泛关注。本文将深入解析阿里云Arm计算架构云服务器的技术特点、适用场景以及包年包月与按量付费的收费标准与最新活动价格情况,以供选择参考。
|
26天前
|
存储 Docker 容器
ARM架构鲲鹏主机BClinux离线安装docker步骤
下载并安装适用于ARM架构的Docker CE二进制文件,解压后移动至/usr/bin目录。创建docker组,配置systemd服务脚本(docker.service、docker.socket、containerd.service),重载systemd配置,启动并启用docker服务。编辑daemon.json配置存储驱动、镜像加速地址等,最后拉取所需镜像。
37 0
|
1月前
|
NoSQL MongoDB Docker
求助,有没有大神可以找到arm64架构下mongodb的3.6.8版本的docker镜像?
在Docker Hub受限的情况下,寻求适用于ARM架构的docker镜像资源或拉取链接,以便在x86架构上获取;内网中的机器为ARM架构,因此优先请求适合ARM的Docker镜像或Dockerfile,非常感激您的帮助。