文档库 最新最全的文档下载
当前位置:文档库 › Stm32 IO端口及其中断

Stm32 IO端口及其中断

Stm32 IO端口及其中断
Stm32 IO端口及其中断

弟4章I/O端口及中断

I/O口(GPIO)

一、GPIO的概述:

GPI/O,通用型之输入输出(General Purpose I/O)的简称,对于stm32的学习,应该从最基本的GPIO开始学习:首先看看STM32的datasheet上对GPIO口的简单介绍:每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。共7组寄存器。GPIO端口的每个位可以由软件分别配置成多种模式。每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。我们常用的IO端口寄存器只有4个:CRL、CRH、IDR、ODR。CRL和CRH控制着每个IO口的模式及输出速率。二、GPIO的配置:

当使用GPIO时,需要两步。一是:配置模式,二是配置时钟。对于模式配置共有8种,可以通过编程选择:

1.浮空输入:GPIO_Mode_IN_FLOATING

2.带上拉输入:GPIO_Mode_IPU

3.带下拉输入:GPIO_Mode_IPD

4.模拟输入:GPIO_Mode_AIN

5.开漏输出:GPIO_Mode_Out_OD

6.推挽输出:GPIO_Mode_Out_PP

7.复用功能的推挽输出:GPIO_Mode_AF

8.复用功能的开漏输出:GPIO_Mode_AF_OD

模式7和模式8需根据具体的复用功能决定。时钟配置将会在后续课程中一一介绍。

I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz 和50MHz),这有利于噪声控制。这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。

三、GPIO的功能:

1.通用I/O(GPIO):最最基本的功能,可以驱动LED、可以产生PWM、可以驱动蜂鸣器等等;

2.单独的位设置或位清除:方便软体作业,程序简单。端口配置好以后只需GPIO_SetBits(GPIOx,GPIO_Pin_x)就可以实现对GPIOx的pinx位为高电平;GPIO_ResetBits(GPIOx,GPIO_Pin_x)就可以实现对GPIOx的pinx位为低电平。

3.外部中断/唤醒线:端口必须配置成输入模式时,所有端口都有外部中断能力;

4.复用功能(AF):复用功能的端口兼有IO功能等。复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式:(CNFx[1:0]=01b,MODEx[1:0]=00b)。

5.软件重新映射I/O复用功能:为了使不同器件封装的外设I/O 功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们的原始引脚上了;

6.GPIO锁定机制:主要针对复位设定的,当某端口位lock后,复位后将不改变的此端口的位配置。

四、GPIO的配置

void GPIO_Config(void)

{

//对PB3进行初始化配置

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置翻转速度

GPIO_Init(GPIOB,&GPIO_InitStructure);//对PB3初始化

/*对PB6上拉输出*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//设置上拉GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化PB6

}

中断系统

一、中断的定义

中断的定义:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。

二、STM32中断的概述(NVIC)

ARM cortex_m3内核支持256个中断(16个内核+240外部)和可编程256级中断优先级的设置STM32采用Cortex-m3内核,但是STM32并没有使用Cortex-m3的全部资源。STM32目前支持的中断共为84个(16个内核+68个外部),(注:68个外部中断可以

)和16级可编程中断优先级的设置(仅使中断向量表)

参看stm32中断向量表

用中断优先级设置8bit中的高4位,见后面解释)。STM32的外部中断通道已经固定分配给相应的外设。NVIC,中文名嵌套中断向量控

制器,是Cortex-M3系列控制器内部独有集成单元,与CPU结合紧密,降低中断延迟时间并且能更加高效处理后续中断。

三、中断优先级

STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,也可把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就

要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个bits用于设置中断源的优先级,这8个bits 可以有8种分配方式,如下:所有8位用于指定响应优先级

最高1位用于指定抢占式优先级,最低7位用于指定响应优先级

最高2位用于指定抢占式优先级,最低6位用于指定响应优先级

最高3位用于指定抢占式优先级,最低5位用于指定响应优先级

最高4位用于指定抢占式优先级,最低4位用于指定响应优先级

最高5位用于指定抢占式优先级,最低3位用于指定响应优先级

最高6位用于指定抢占式优先级,最低2位用于指定响应优先级

最高7位用于指定抢占式优先级,最低1位用于指定响应优先级

这就是优先级分组的概念。

Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:

第0组:所有4位用于指定响应优先级

第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级

第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级

第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级

第4组:所有4位用于指定抢占式优先级

NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:

NVIC_PriorityGroup_0=>选择第0组

NVIC_PriorityGroup_1=>选择第1组

NVIC_PriorityGroup_2=>选择第2组

NVIC_PriorityGroup_3=>选择第3组

NVIC_PriorityGroup_4=>选择第4组

例:下面为一个中断的配置

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//选择优先级分组的第一组

NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;//选择EXTI0中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级为0

NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//响应优先级wie1

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能中断时钟

NVIC_Init(&NVIC_InitStructure);//初始化中断

}

四、EXTI:外部中断/事件控制器

外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以被独立的屏蔽。挂起寄存器保持着状态线的中断要求。

EXTI控制器的主要特性如下

控制器的主要特性如下:

每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达19个中断/事件请求检测脉冲宽度低于APB2时种宽度的外部信号。参见数据手册中电气特性部分的相关参数。

EXTI框图

功能说明

如要产生中断,中断线必须事先配置好并被激活。这是根据需要的边沿检测通过设置2个触发寄存器,和在中断屏蔽寄存器的相应位写“1”到来允许中断请求。当需要的边沿在外部中断线上发生时,将产生一个中断请求,对应的挂起位也随之被置1。通过写“1”

到挂起寄存器,可以清除该中断请求。为产生事件触发,事件连接线必须事先配置好并被激活。这是根据需要的边沿检测通过设置2个触发寄存器,和在事件屏蔽寄存器的相应位写“1”到来允许事件请求。当需要的边沿在事件连线上发生时,将产生一个事件请求脉冲,对应的挂起位不被置1。通过在软件中断/事件寄存器写“1”,一个中断/事件请求也可以通过软件来产生。

外部中断/事件线路映像80通用I/O端口以下图的方式连接到19个外部中断/事件线上:

外部中断通用I/O映像

另外三种其他的外部中断/事件控制器的连接如下:EXTI线16连接到PVD输出

EXTI线17连接到RTC闹钟事件

EXTI线18连接到USB唤醒事件

由上图可以知道,PA1--PE1通过EXTI1向内部传输,直到

PA15--PE15通过EXTI15向内部传输。所以配置IO中断线时就可参照上图进行相关的配置。

EXTI的配置

void EXIT_Configuration(void)

{

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,

GPIO_PinSource6);//连接PB6线

EXTI_InitStructure.EXTI_Line=EXTI_Line6;

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//配置中断

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发

EXTI_InitStructure.EXTI_LineCmd=ENABLE;//使能EXTI时钟EXTI_Init(&EXTI_InitStructure);//初始化

}

关于STM32串口空闲中断IDEL的问题

关于STM32串口空闲中断IDEL的问题 1.空闲中断是接受数据后出现一个byte 的高电平(空闲)状态,就会触发空闲 中断.并不是空闲就会一直中断,准确的说应该是上升沿(停止位)后一个 byte,如果一直是低电平是不会触发空闲中断的(会触发break 中断)。 2.关于第二点有要铺垫的三个情况,datasheet 中”当一空闲帧被检测到时,其处 理步骤和接收到普通数据帧一样,但如果IDLEIE 位被设置将产生一个中断”“空 闲符号被视为完全由'1'组成的一个完整的数据帧,后面跟着包含了数 据的下一帧的开始位'1'的位数也包括了停止位的位数”空闲符号的 配图后面跟这一个低电平.有人理解为只有收到下一个数据的起始位才会触发中 断,这样理解是不对的,应该是数据后有空闲了一帧就会触发. 3.清中断的方式感觉奇怪,使用函数USART_ClearITPendingBit( USART1, USART_IT_IDLE )清除不了中断的.我用的是3.5 的库,查看函数说明,里面的 @param 参数并没有IDLE,后面的@note 中,这样说:”PE(Parity error),FE(Framing error),NE(Noise error),ORE(OverRun error) and IDLE(Idle line detected) pending bits are cleared by software sequence: a read operation to USART_SR register (USART_GetITStatus()) followed by a read operation to USART_DR register (USART_ReceiveData()).”我是通过语句”USART1->DR;”来清除IDLE 中断的. 现在有很多数据处理都要用到不定长数据,而单片机串口的RXNE 中断一次 只能接收一个字节的数据,没有缓冲区,无法接收一帧多个数据,现提供两种 利用串口IDLE 空闲中断的方式接收一帧数据,方法如下: 方法1:实现思路:采用STM32F103 的串口1,并配置成空闲中断IDLE 模 式且使能DMA 接收,并同时设置接收缓冲区和初始化DMA。那么初始化完成 之后,当外部给单片机发送数据的时候,假设这帧数据长度是200 个字节,那

常用协议对应的端口号

标题:常用协议对应的端口号 由Anonymous 于星期日, 04/01/2007 - 01:28 发表 DHCP:服务器端的端口号是67 DHCP:客户机端的端口号是68 POP3:POP3仅仅是接收协议,POP3客户端使用SMTP向服务器发送邮件。POP3所用的端口号是110。 SMTP:端口号是25。SMTP真正关心的不是邮件如何被传送,而只关心邮件是否能顺利到达目的地。SMTP具有健壮的邮件处理特性,这种特性允许邮件依据一定标准自动路由,SMTP具有当邮件地址不存在时立即通知用户的能力,并且具有在一定时间内将不可传输的邮件返回发送方的特点。 Telnet:端口号是23。Telnet是一种最老的Internet应用,起源于ARPNET。它的名字是“电信网络协议(Telecommunication Network Protocol)”的缩写。 FTP:FTP使用的端口有20和21。20端口用于数据传输,21端口用于控制信令的传输,控制信息和数据能够同时传输,这是FTP的特殊这处。FTP采用的是TCP连接。 TFTP:端口号69,使用的是UDP的连接。 端口号的作用及常见端口号用途说明 IP协议是由TCP、UDP、ARP、ICMP等一系列子协议组成的。其中,主要用来做传输数据使用的是TCP和UDP协议。在TCP和UDP协议中,都有端口号的概念存在。端口号的作用,主要是区分服务类别和在同一时间进行多个会话。 举例来说,有主机A需要对外提供FTP和WWW两种服务,如果没有端口号存在的话,这两种服务是无法区分的。实际上,当网络上某主机B需要访问A的FTP服务时,就要指定目的端口号为21;当需要访问A的WWW服务时,则需要将目的端口号设为80,这时A根据B访问的端口号,就可以区分B的两种不同请求。这就是端口号区分服务类别的作用。 再举个例子:主机A需要同时下载网络上某FTP服务器B上的两个文件,那么A需要与B同时建立两个会话,而这两个传输会话就是靠源端口号来区分的。在这种情况下如果没有源端口号的概念,那么A就无法区分B传回的数据究竟是属于哪个会话,属于哪个文件。而实际上的通信过程是,A使用本机的1025号端口请求B的21号端口上的文件1,同时又使用1026号端口请求文件2。对于返回的数据,发现是传回给1025号端口的,就认为是属于文件1;传回给1026号端口的,则认为是属于文件2。这就是端口号区分多个会话的作用。 如果说IP地址让网络上的两个节点之间可以建立点对点的连接,那么端口号则为端到端的连接提供了可能。理解端口号的概念,对于理解TCP/IP协议的通信过程有着至关重要的作用。 端口号的范围是从1~65535。其中1~1024是被RFC 3232规定好了的,被称作“众所周知的端口”(Well Known Ports);从1025~65535的端口被称为动态端口(Dynamic Ports),

端口被占用如何解决

端口被占用如何解决 经常,我们在启动应用的时候发现系统需要的端口被占用,如何知道谁占有了该端口,很多人都比较头疼,下面就介绍一种非常简单的方法,希望对大家有用 假如我们需要确定谁占用了我们的8080端口 1.可通过cmd ----》netstat -ano 指令查看所有的端口占用情况 C:\Users\Administrator>netstat -ano 活动连接 协议本地地址外部地址状态PID TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 472 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:801 0.0.0.0:0 LISTENING 9524 TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 2416 TCP 0.0.0.0:5001 0.0.0.0:0 LISTENING 9524 TCP 0.0.0.0:7879 0.0.0.0:0 LISTENING 4860 TCP 0.0.0.0:8009 0.0.0.0:0 LISTENING 9524 TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 9524 TCP 0.0.0.0:49152 0.0.0.0:0 LISTENING 536 TCP 0.0.0.0:49153 0.0.0.0:0 LISTENING 1052 TCP 0.0.0.0:49157 0.0.0.0:0 LISTENING 616 TCP 0.0.0.0:49160 0.0.0.0:0 LISTENING 1116 TCP 0.0.0.0:49172 0.0.0.0:0 LISTENING 600 TCP 0.0.0.0:49202 0.0.0.0:0 LISTENING 2100 TCP 3.3.10.190:139 0.0.0.0:0 LISTENING 4 TCP 3.3.10.190:51248 10.1.1.3:9090 ESTABLISHED 4860 TCP 3.3.10.190:52308 10.10.34.22:80 ESTABLISHED 1280 TCP 127.0.0.1:4300 0.0.0.0:0 LISTENING 7060 TCP 127.0.0.1:4301 0.0.0.0:0 LISTENING 7060 TCP 127.0.0.1:8005 0.0.0.0:0 LISTENING 9524 TCP 127.0.0.1:8411 0.0.0.0:0 LISTENING 952 TCP 127.0.0.1:20001 0.0.0.0:0 LISTENING 2620 TCP 127.0.0.1:27382 0.0.0.0:0 LISTENING 3116 TCP 127.0.0.1:49220 127.0.0.1:62522 ESTABLISHED 4328 TCP 127.0.0.1:49392 127.0.0.1:49393 ESTABLISHED 4860 TCP 127.0.0.1:49393 127.0.0.1:49392 ESTABLISHED 4860 TCP 127.0.0.1:50176 127.0.0.1:50177 ESTABLISHED 4860 TCP 127.0.0.1:50177 127.0.0.1:50176 ESTABLISHED 4860 TCP 127.0.0.1:50183 127.0.0.1:50184 ESTABLISHED 6512 TCP 127.0.0.1:50184 127.0.0.1:50183 ESTABLISHED 6512 TCP 127.0.0.1:50437 127.0.0.1:50438 ESTABLISHED 4860

TMS320F28335外部中断总结

TMS320F28335外部中断总结 作者:Free 文章来源:Free 点击数:93 更新时间:2010-8-26 在这里我们要十分清楚DSP的中断系统。C28XX一共有16个中断源,其中有2个不可屏蔽的中断RESET和NMI、定时器1和定时器2分别使用中断13 和14。这样还有12个中断都直接连接到外设中断扩展模块PIE上。说的简单一点就是PIE 通过12根线与28335核的12个中断线相连。而PIE的另外 一侧有12*8根线分别连接到外设,如AD、SPI、EXINT等等。这样PIE共管理12*8=96个外部中断。这12组大中断由28335核的中断寄存器IER来控 制,即IER确定每个中断到底属于哪一组大中断(如IER |= M_INT12;说明我们要用第12组的中断,但是第12组里面的什么中断CPU并不知道需 要再由PIEIER确定)。接下来再由PIE模块中的寄存器PIEIER中的低8确定该中断是这一组的第几个中断,这些配置都要告诉CPU(我们不难想 象到PIEIER共有12总即从PIEIER1-PIEIER12)。另外,PIE模块还有中断标志寄存器PIEIFR,同样它的低8位是来自外部中断的8个标志位,同 样CPU的IFR寄存器是中断组的标志寄存器。由此看来,CPU的所有中断寄存器控制12组的中断,PIE的所有中断寄存器控制每组内8个的中断。 除此之外,我们用到哪一个外部中断,相应的还有外部中断的寄存器,需要注意的就是外部中断的标志要自己通过软件来清零。而PIE和CPU的 中断标志寄存器由硬件来清零。 EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.XINT2 = &ISRExint; //告诉中断入口地址 EDIS; // This is needed to disable write to EALLOW protected registers PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block使能PIE PieCtrlRegs.PIEIER1.bit.INTx5= 1; //使能第一组中的中断5 IER |= M_INT1; // Enable CPU 第一组中断

常见网络协议端口号

编号:_______________本资料为word版本,可以直接编辑和打印,感谢您的下载 常见网络协议端口号 甲方:___________________ 乙方:___________________ 日期:___________________

常见网络协议端口号 篇一:常见网络端口和网络协议 常见网络端口和网络协议 常见端口号: hTTp——80 FTp——21 TeLneTt ——23 smTp ---- 25 Dns——53 TFTp——69 snmp ---- 161 RIp ——520 查看端口状况: netstat - n 应用层、表示层、会话层(telnet、ftp、snm^ smtp、rpc ) 传输层、网络层(Ip、Tcp、ospF、RIp、ARp RARp

booTp、Icmp) 端口号的范围: 0~255公共应用 255~1023商业公司 1024~65535没有限制 或: 1-1023众所周知端口 >=1024随机端口 下面介绍的这些端口都是服务器默认的端口,所以认 识这些服务器端口对我们学习,和故障排错时很有帮助的。 下面列出了这些服务所对应的端口。 ftp-data20/tcp#FTp,data ftp21/tcp#FTp.control telnet23/tcp smtp25/tcpmail#simplemailTransferprotocolpop3110/tc p#postofficeprotocol-Version3domain53/udp#Domainnam eserver tftp69/udp#TrivialFileTransfer http80/tcpwwwwww-http#worldwideweb https443/tcp ms-sql-s1433/tcp#microsoft-sQL-server ms-sql-m1434/udp#microsoft-sQL-monitor

常用端口号大全

常用端口号大全(详细) [ 2007-7-23 22:42:00 | By: 梦精灵] ?21/tcp FTP 文件传输协议 ?22/tcp SSH 安全登录、文件传送(SCP)和端口重定向 ?23/tcp Telnet 不安全的文本传送 ?25/tcp SMTP Simple Mail Transfer Protocol (E-mail) ?69/udp TFTP Trivial File Transfer Protocol ?79/tcp finger Finger ?80/tcp HTTP 超文本传送协议(WWW) ?88/tcp Kerberos Authenticating agent ?110/tcp POP3 Post Office Protocol (E-mail) ?113/tcp ident old identification server system ?119/tcp NNTP used for usenet newsgroups ?220/tcp IMAP3 ?443/tcp HTTPS used for securely transferring web pages 端口:0 服务:Reserved 说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。 端口:1 服务:tcpmux 说明:这显示有人在寻找SGI Irix机器。Irix是实现tcpmux的主要提供者,默认情况下tcpmux在这种系统中被打开。Irix机器在发布是含有几个默认的无密码的帐户,如:IP、GUEST UUCP、NUUCP、DEMOS 、TUTOR、DIAG、OUTOFBOX等。许多管理员在安装后忘记删除这些帐户。因此HACKER在I NTERNET上搜索tcpmux并利用这些帐户。 端口:7 服务:Echo 说明:能看到许多人搜索Fraggle放大器时,发送到X.X.X.0和X.X.X.255的信息。 端口:19 服务:Character Generator 说明:这是一种仅仅发送字符的服务。UDP版本将会在收到UDP包后回应含有垃圾字符的包。TCP连接时会发送含有垃圾字符的数据流直到连接关闭。HAC KER利用IP欺骗可以发动DoS攻击。伪造两个chargen服务器之间的UDP包。

最新stm32学习之串口usart复习进程

STM32学习之串口USART STM32 的串口是相当丰富的。最多可提供5路串口,有分数波特率发生器、支持单线光通信和半双工单线通讯、支持LIN、智能卡协议和IrDA SIR ENDEC 规范(仅串口3 支持)、具有DMA 等。串口最基本的设置,就是波特率的设置。STM32 的串口使用起来还是蛮简单的,只要你开启了串口时钟,并设置相应IO口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息,就可以使用了。 1、串口时钟使能。串口作为STM32 的一个外设,其时钟由外设始终使能寄存器控制,这里我们使用的串口1是在APB2ENR 寄存器的第14 位。除了串口1 的时钟使能在APB2ENR寄存器,其他串口的时钟使能位都在APB1ENR。 1、串口的作用:用在STM32板子和PC机通信的。我们调试的时候,无法知道是否正确,就可以用STM32的cpu,给串口输出一些信息给PC,我们通过屏幕(实际上是终端串口软件),可以看到这些信息,从而知道当前程序的错误可能出现的位置。当然,也可以在PC的键盘敲打命令,让串口帮传递给STM32板子,来执行这些命令。 2、串口的工作模式一般有两种方式:查询和中断 (1)查询:串口程序不断地循环查询,看看当前有没有数据要它传,如果有,就帮助传送(可以从PC到STM32板子,也可以从STM32 板子到PC)。 (2)中断:平时串口只要打开中断即可。如果发现有一个中断来,则意味着要它帮助传输数据——它就马上进行数据的传送。同样,可以从PC到STM32板子,也可以从STM32板子到PC 。 步骤一从硬件开始学习。大家先打开芯达STM32开发板附带的原理图。找到串口部分。笔者把它截图如下。我们发现,串口模块的电路是这样的:STM32的CPU引脚,通过两个PA端口的引脚PA10和PA9(此两个引脚复用USART),连接到一个SP3232芯片,或者MAX232芯片。然后再连接到DB9串口座上。由于232芯片可以允许走两路信号,因此,我们扩展了一个串口COM2,请注意,如无特别说明,我们都将使用COM1。

常用端口号和协议对照表

TCP 1=TCP Port Service Multiplexer TCP 2=Death TCP 5=Remote Job Entry,yoyo TCP 7=Echo TCP 11=Skun TCP 12=Bomber TCP 16=Skun TCP 17=Skun TCP 18=消息传输协议,skun TCP 19=Skun TCP 20=FTP Data,Amanda TCP 21=文件传输,Back Construction,Blade Runner,Doly Trojan,Fore,FTP trojan,Invisible FTP,Larva, WebEx,WinCrash TCP 22=远程登录协议 TCP 23=远程登录(Telnet),Tiny Telnet Server (= TTS) TCP 25=电子邮件(SMTP),Ajan,Antigen,Email Password Sender,Happy 99,Kuang2,ProMail trojan,Shtrilitz,Stealth,Tapiras,Terminator,WinPC,WinSpy,Haebu Coceda TCP 27=Assasin TCP 28=Amanda TCP 29=MSG ICP TCP 30=Agent 40421 TCP 31=Agent 31,Hackers Paradise,Masters Paradise,Agent 40421 TCP 37=Time,ADM worm TCP 39=SubSARI TCP 41=DeepThroat,Foreplay TCP 42=Host Name Server TCP 43=WHOIS TCP 44=Arctic TCP 48=DRAT TCP 49=主机登录协议 TCP 50=DRAT TCP 51=IMP Logical Address Maintenance,Fuck Lamers Backdoor TCP 52=MuSka52,Skun TCP 53=DNS,Bonk (DOS Exploit) TCP 54=MuSka52 TCP 58=DMSetup TCP 59=DMSetup TCP 63=whois++ TCP 64=Communications Integrator TCP 65=TACACS-Database Service TCP 66=Oracle SQL*NET,AL-Bareki TCP 67=Bootstrap Protocol Server TCP 68=Bootstrap Protocol Client

STM32串口中断接收方式详细比较

本例程通过PC机的串口调试助手将数据发送至STM32,接收数据后将所接收的数据又发送至PC机,具体下面详谈。。。 实例一: void USART1_IRQHandler(u8 GetData) { u8 BackData; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中断产生 { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志. GetData = UART1_GetByte(BackData); //也行GetData=USART1->DR; USART1_SendByte(GetData); //发送数据 GPIO_SetBits(GPIOE, GPIO_Pin_8 ); //LED闪烁,接收成功发送完成 delay(1000); GPIO_ResetBits(GPIOE, GPIO_Pin_8 ); } } 这是最基本的,将数据接收完成后又发送出去,接收和发送在中断函数里执行,main函数里无其他要处理的。 优点:简单,适合很少量数据传输。 缺点:无缓存区,并且对数据的正确性没有判断,数据量稍大可能导致数据丢失。 实例二: void USART2_IRQHandler() { if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) //中断产生 { USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除中断标志 Uart2_Buffer[Uart2_Rx_Num] = USART_ReceiveData(USART2); Uart2_Rx_Num++; } if((Uart2_Buffer[0] == 0x5A)&&(Uart2_Buffer[Uart2_Rx_Num-1] == 0xA5)) //判断最后接收的数据是否为设定值,确定数据正确性 Uart2_Sta=1; if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) == SET) //溢出 { USART_ClearFlag(USART2,USART_FLAG_ORE); //读SR USART_ReceiveData(USART2); //读DR } } if( Uart2_Sta ) { for(Uart2_Tx_Num=0;Uart2_Tx_Num < Uart2_Rx_Num;Uart2_Tx_Num++)

STM32 无中断串口代码

STM32 无中断串口代码2010-05-14 16:09 串口,是我们日常使用最多的一部分,刚开始做电子工程师的,基本都是从这个开始的,下面的代码是我使用STM32库编写的串口输出和读取的代码。 1、串口初始化函数:void USART_Ini(USART_TypeDef* USARTx,u16 buad) 2、串口中断开启和关闭:USART_IT(USART_TypeDef* USARTx,FunctionalState NewState) 3、串口接收:u16 Getch(USART_TypeDef* USARTx) 4、串口单个字符输出:void Putch(USART_TypeDef* USARTx,u16 ch) 5、串口输出字符串:void PutStr(USART_TypeDef* USARTx,u16 *SendBuf,u16 Length) #include "stm32f10x_lib.h" u16 RecDateBuffer[100]; u16 RecLen; u8 SendDateBuffer[100]; /************************************************************* ****************** * Function Name : Uart_Ini * Description : 串口初始化 * Input : * Output : None * Return : ************************************************************** *****************/ void USART_Ini(USART_TypeDef* USARTx,u16 buad) { USART_InitTypeDef USART_InitStructure; USART_ClockInitTypeDef USART_ClockIni; GPIO_InitTypeDef GPIO_InitStructure; /* Configure USART1 Tx (PA.09) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Configure USART1 Rx (PA.10) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

常用协议及端口号

Ethereal支持的常用协议端口号 TCP协议支持 协议名称TCP端口号协议名称解释 ACAP 674 AIM 5190 BEEP 10288 CAST 4224 CMP 829 COPS 3288 PKTCABLE_COPS 2126 PKTCABLE_MM_COPS 3918 DAAP 3689 DHCP FO 519 DIAMETER 3868 DISTCC 3632 DLSW 2065 NP 20000 NS 53 DNS5353 DSI 548 FTP DATA 20 FTP21 GIFT 1213 CS 1720 HTTP 80

PROXY_HTTP 3128 PROXY_ADMIN_HTTP 3132 HKP 11371 DAAP 3689 SSDP 1900 IB 3050 ICAP 1344 IMAP 143 IRC 6667 ISAKMP 500 JABBER 5222 KERBEROS 88 LAPLINK 1547 LDAP 389 GLOBALCAT_LDAP 3268 LDP 646 PRINTER 515 MB TCP502 MSNMS 1863 MSRP 0 MySQL 3306 NBSS 139 CIFS 445 NCP 524 NDMP 10000 PA 0x0d44

BROKER 0x0bc6 SRS 0x0bca ENS 0x0bc8 RMS 0x0bcb NOTIFY_LISTENER 0x0bc9 NETSYNC 5253 NNTP 119 NTP 123 POP 110 PPTP 1723 PVFS2 3334 RMI 1099 RSH 514 RSYNC 873 RTSP 554 SIP 5060 SKINNY 2000 SLSK_1 2234 SLSK_2 5534 SLSK_3 2240 SMRSE 4321 SMTP25 SNMP161 SNMP_TRAP 162 SMUX 199 SOCKS 1080

COM端口被占用

COM端口被占用(在使用中)的问题 1.打开注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter 把ComDB删除后重新尝试即可!(注:这样会重建所有COM口)。如果还不行,重启电脑! 2.另:到注册表下HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM将多余的COM口删除即可 3.另外还可以看看集成的Modem是否占用了你的这个串口。 打开“控件面板”中的“电话/调制解调器选项”,在“调制解调器”选项卡中是否有一个连接占用着这个串口(如COM1) 解决方法: 如果有连接占用这个串口,直接删除这个连接,重新启动电脑,问题解决。 或者看看详细原因: 1、用安全模式启动,用系统自带的通讯中的“超级终端”测试串口(COM1), 这时同样报错,不过错误信息更详细了,如下: ******错误信息******** Windows 汇报了一个TAPI错误(80000048)。 请用“控件面板”中的“电话/调制解调器选项” 图标来确认调制解调器安装得是否正确。 ********************** 2、然后把电脑正常启动了。 打开“控件面板”中的“电话/调制解调器选项”, 发现在“调制解调器”选项卡中有一个连接占用着这个串口(COM1), 于是马上删除这个连接。 再用“超级终端”测试串口(COM1),不报错了, 表示与串口(COM1)通讯正常。 3、把串口设备连接到串口(COM1)上,用相关软件与设备通讯,正常,问题解决。 关于使用蓝牙设备时COM口被占用问题 由於windows莫名其妙的registry原因,很多用户发现,在安装蓝牙管理软件之後,对应的蓝牙虚拟端口居然变成COM9,甚至是COM13或更高,导致与许多应用程序,如手机同步软件,PDA同步软件无法使用,多次重新安装蓝牙管理软件只会让状况更恶化.. 解决方案如下(执行下列步骤之前,请务必卸载蓝牙管理程序,并重新开机) 1.在Windows系统,按开始>执行>输入cmd,按回车 2.出现命令字符视窗之後,输入 set DEVMGR_SHOW_NONPRESENT_DEVICES=1 按回车

10.常见端口号对照表

10.常见端口号对照表

常见端口号对照表 端口:0 服务:Reserved 说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。 端口:1 服务:tcpmux 说明:这显示有人在寻找SGI Irix机器。Irix 是实现tcpmux的主要提供者,默认情况下tc pmux在这种系统中被打开。Irix机器在发布是含有几个默认的无密码的帐户,如:IP、G UEST UUCP、NUUCP、DEMOS 、TUTOR、DIAG、OUTOFBOX等。许多管理员在安装后忘记删除这些帐户。因此HACKER在INT ERNET上搜索tcpmux并利用这些帐户。 端口:7

服务:Echo 说明:能看到许多人搜索Fraggle放大器时,发送到X.X.X.0和X.X.X.255的信息。 端口:19 服务:Character Generator 说明:这是一种仅仅发送字符的服务。UDP版本将会在收到UDP包后回应含有垃圾字符的包。TCP连接时会发送含有垃圾字符的数据流直到连接关闭。HACKER利用IP欺骗可以发动DoS攻击。伪造两个chargen服务器之间的UDP包。同样Fraggle DoS攻击向目标地址的这个端口广播一个带有伪造受害者IP的数据包,受害者为了回应这些数据而过载。 端口:21 服务:FTP 说明:FTP服务器所开放的端口,用于上传、下载。最常见的攻击者用于寻找打开anonymo us的FTP服务器的方法。这些服务器带有可读写的目录。木马Doly Trojan、Fore、Invisi ble FTP、WebEx、WinCrash和Blade Runn

如何查看80端口是否被占用_端口被占用解决办法

80端口是否被占用的解决办法 一、问题描述 公司外网发布是必须使用80端口,可是每次tomcat启动时,总时报端口占用,如果将端口改为不用的端口,例如:8090等,就能正常启动使用。 二、问题分析 一般服务器安装MS SQL Server 2008 时,都要求安装IIS 5.0或6.0,此时,肯定时被IIS 占用了,如果你把IIS 端口号修改成其它的,重启IIS 后,80端口仍然被占用呢,那你就需要检测是否还有其它服务占用了。 三、问题检查及处理 先介绍一下我的服务器环境:Windows 2003 Server SP2,MS SQL Server 2008 R2 ,Tomcat 6.0 ,Sun JDK 1.6 和1.7版本。 检查端口占用常用方法有:使用Dos 命令检查或使用专用软件检查。 使用Dos 检查:在Dos 命令行中输入netstat -aon|findstr "80" 即可查看到端口被谁占用,我查时被System 占用,PID为4,使用进程查看器发现是系统自己的进程,所以没办法停用,如果停用,系统无法正常工作,并且重新启动电脑。 使用专用软件检查,例如:Active Ports软件,可以查看到什么端口被什么软件点用,安装位置是什么等,就可以直接定位,但是我的服务器还是显示为PID为4,程序为System 占用,声明:System不带.exe啊(有的进程为:System.exe,我的则不是) 处理方法:经仔细查找,发现是MS SQL Server 2008服务占用了80端口,此时启动SQL Server 配置管理器,进入后,将SQL Server Reporting Services 服务停用后即可,也不影响MS SQL Server 的正常使用。

stm32 串口中断总结

本文以USART1为例,叙述串口中断的编程过程。 1、先来讲述一下在应用串口中断时涉及到的一些库文件。 首先对于STM32外设库文件的应用编程,misc.c和stm32f10x_rcc.c是肯定要添加到。 接下来就是我们要用到的相关外设了。毫无疑问,串口文件stm32f10x_usart.c是必须的。串口通信是对通用GPIO端口引脚的功能复用,所以还需要stm32f10x_gpio.c文件。另外,因为有中断的产生,所以中断文件stm32f10x_it.c也是必要的,当然这个文件一般和main.c 放在一个文件夹下(一般习惯为User文件夹),因为我们的中断响应函数是要在里面自己编写的。 当然还有其他的基本必须文件如系统配置文件等在这地方就不说了,这个是创建一个工程应该知道的。 2、初始化 对于串口通信的初始化,不仅仅只是对串口的初始化(这个地方是比较烦人的,不像别的芯片那样简洁明了)。 ●?首先时钟使能配置。STM32内部的时钟有很多,感兴趣的自己看看参考手册。此处 以USART1为例说明。有USART1时钟、GPIOA时钟、GPIO复用(AFIO)时钟。由于 此处USART1和GPIOA、AFIO均在APB2上,所以可以一次配置完成。如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB 2Periph_USART1 ,ENABLE); ●?其次中断配置。主要有优先级组设定、USART1中断使能、该中断的优先级,中断初 始化。程序如下: void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//选择分组方式0 /* 使能 USART1中断 */ NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } ●?然后GPIO复用功能配置。一般情况下我们使用原始的外设和GPIO端口引脚的映射 关系,如果要改变其映射的话,请另外查看参考手册上关于GPIO重映射部分。对 于GPIO的复用,其引脚的输入与输出模式都有要求,在参考手册上有详细说明。 void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 配置 USART1 Rx 作为浮空输入 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(USARTy_GPIO, &GPIO_InitStructure); /* 配置 USART1 Tx 作为推挽输出 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

常用端口号与对应的服务以及端口关闭

常用端口号与对应的服务以及端口关闭 端口简介:本文介绍端口的概念,分类,以及如何关闭/开启一个端口 21端口:21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务。 23端口:23端口主要用于Telnet(远程登录)服务,是Internet上普遍采用的登录和仿真程序。 25端口:25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务器所开放,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。 53端口:53端口为DNS(Domain Name Server,域名服务器)服务器所开放,主要用于域名解析,DNS 服务在NT系统中使用的最为广泛。 67、68端口:67、68端口分别是为Bootp服务的Bootstrap Protocol Server(引导程序协议服务端)和Bootstrap Protocol Client(引导程序协议客户端)开放的端口。 69端口:TFTP是Cisco公司开发的一个简单文件传输协议,类似于FTP。 79端口:79端口是为Finger服务开放的,主要用于查询远程主机在线用户、操作系统类型以及是否缓冲区溢出等用户的详细信息。 80端口:80端口是为HTTP(HyperText Transport Protocol,超文本传输协议)开放的,这是上网冲浪使用最多的协议,主要用于在WWW(World Wide Web,万维网)服务上传输信息的协议。 99端口:99端口是用于一个名为“Metagram Relay”(亚对策延时)的服务,该服务比较少见,一般是用不到的。 109、110端口:109端口是为POP2(Post Office Protocol Version 2,邮局协议2)服务开放的,110端口是为POP3(邮件协议3)服务开放的,POP2、POP3都是主要用于接收邮件的。 111端口:111端口是SUN公司的RPC(Remote Procedure Call,远程过程调用)服务所开放的端口,主要用于分布式系统中不同计算机的内部进程通信,RPC在多种网络服务中都是很重要的组件。 113端口:113端口主要用于Windows的“Authentication Service”(验证服务)。 119端口:119端口是为“Network News Transfer Protocol”(网络新闻组传输协议,简称NNTP)开放的。 135端口:135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务。

ftp 21端口被占用解决办法

ftp 21端口被占用解决办法 (2012-05-16 09:17:12) 最近发现服务器 ftp 21端口被占用,在博客园里找到这个方法不错,来分享下。有时安装程序时,会出现XX端口被占用的情况,可以通过CMD命令查看什么程序占用 1. netstat -ano 查看相应端口对应程序的PID 例如: C:\>netstat -ano Active Connections Proto Local Address Foreign Address State PID TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1760 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:2967 0.0.0.0:0 LISTENING 660 TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 1712 TCP 0.0.0.0:3934 0.0.0.0:0 LISTENING 728 TCP 0.0.0.0:10700 0.0.0.0:0 LISTENING 4920 TCP 10.186.20.116:21 0.0.0.0:0 LISTENING272 TCP 10.186.20.116:80 0.0.0.0:0 LISTENING 4516 可查看到占用21端口的进程PID为272 2. tasklist查看相应的PID号的程序 tasklist /fi "pid eq PID" 例, C:\tasklist /fi "pid eq 272" 图像名 PID 会话名会话# 内存使用 ========================= ====== ================ ======== ============ ServUDaemon.exe 272 Console 0 3,980 K 3. 如果要释放该端口用tskill PID命令 例,如要释放21端口 tskill 272 --The End--

常用端口与对应的服务

常用端口号与对应的服务以及端口关闭 21端口:21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务。 23端口:23端口主要用于Telnet(远程登录)服务,是Internet上普遍采用的登录和仿真程序。 25端口:25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务器所开放,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。 53端口:53端口为DNS(Domain Name Server,域名服务器)服务器所开放,主要用于域名解析,DNS 服务在NT系统中使用的最为广泛。 67、68端口:67、68端口分别是为Bootp服务的Bootstrap Protocol Server(引导程序协议服务端)和Bootstrap Protocol Client(引导程序协议客户端)开放的端口。 69端口:TFTP是Cisco公司开发的一个简单文件传输协议,类似于FTP。 79端口:79端口是为Finger服务开放的,主要用于查询远程主机在线用户、操作系统类型以及是否缓冲区溢出等用户的详细信息。 80端口:80端口是为HTTP(HyperText Transport Protocol,超文本传输协议)开放的,这是上网冲浪使用最多的协议,主要用于在WWW(World Wide Web,万维网)服务上传输信息的协议。 99端口:99端口是用于一个名为“Metagram Relay”(亚对策延时)的服务,该服务比较少见,一般是用不到的。 109、110端口:109端口是为POP2(Post Office Protocol Version 2,邮局协议2)服务开放的,110端口是为POP3(邮件协议3)服务开放的,POP2、POP3都是主要用于接收邮件的。 111端口:111端口是SUN公司的RPC(Remote Procedure Call,远程过程调用)服务所开放的端口,主要用于分布式系统中不同计算机的内部进程通信,RPC在多种网络服务中都是很重要的组件。 113端口:113端口主要用于Windows的“Authentication Service”(验证服务)。 119端口:119端口是为“Network News Transfer Protocol”(网络新闻组传输协议,简称NNTP)开放的。 135端口:135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务。 137端口:137端口主要用于“NetBIOS Name Service”(NetBIOS名称服务)。

相关文档
相关文档 最新文档