stm32 串口中断总结共16页Word文件下载.docx

上传人:b****1 文档编号:3204378 上传时间:2023-05-01 格式:DOCX 页数:18 大小:22.47KB
下载 相关 举报
stm32 串口中断总结共16页Word文件下载.docx_第1页
第1页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第2页
第2页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第3页
第3页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第4页
第4页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第5页
第5页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第6页
第6页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第7页
第7页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第8页
第8页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第9页
第9页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第10页
第10页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第11页
第11页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第12页
第12页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第13页
第13页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第14页
第14页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第15页
第15页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第16页
第16页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第17页
第17页 / 共18页
stm32 串口中断总结共16页Word文件下载.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

stm32 串口中断总结共16页Word文件下载.docx

《stm32 串口中断总结共16页Word文件下载.docx》由会员分享,可在线阅读,更多相关《stm32 串口中断总结共16页Word文件下载.docx(18页珍藏版)》请在冰点文库上搜索。

stm32 串口中断总结共16页Word文件下载.docx

/* 

使能 

USART1 

中断 

*/

NVIC_InitStructure.NVIC_IRQChannel 

USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelSubPriority 

0;

NVIC_InitStructure.NVIC_IRQChannelCmd 

ENABLE;

NVIC_Init(&

NVIC_InitStructure);

}

l然后GPIO复用功能配置。

一般情况下我们使用原始的外设和GPIO端口引脚的映射关系,如果要改变其映射的话,请另外查看参考手册上关于GPIO重映射部分。

对于GPIO的复用,其引脚的输入与输出模式都有要求,在参考手册上有详细说明。

GPIO_Configuration(void)

GPIO_InitTypeDef 

GPIO_InitStructure;

配置 

Rx 

作为浮空输入 

GPIO_InitStructure.GPIO_Pin 

GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode 

GPIO_Mode_IN_FLOATING;

GPIO_Init(USARTy_GPIO, 

&

GPIO_InitStructure);

Tx 

作为推挽输出 

GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed 

GPIO_Speed_50MHz;

GPIO_Mode_AF_PP;

l串口初始化配置(pè

izhì

)。

主要有串口基本参数配置(如波特率、数据位、工作(gōngzuò

)方式等),串口中断(zhōngduà

n)使能,串口使能。

(1) 

基本参数配置(pè

USART_InitTypeDef 

USART_InitStructure;

USART_InitStructure.USART_BaudRate 

9600;

//波特率

USART_InitStructure.USART_WordLength 

USART_WordLength_8b;

//数据长度

USART_InitStructure.USART_StopBits 

USART_StopBits_1;

//停止位

USART_InitStructure.USART_Parity 

USART_Parity_No;

//校验

USART_InitStructure.USART_HardwareFlowControl

=USART_HardwareFlowControl_None;

//硬件流控制无

USART_InitStructure.USART_Mode 

USART_Mode_Rx 

USART_Mode_Tx;

//发送与接受两种方式

USART_Init(USART1, 

USART_InitStructure);

//用配置的参数惊喜串口初始化

(2) 

串口中断使能

USART_ITConfig(USARTy, 

USART_IT_RXNE, 

ENABLE);

//使能接受中断,在接受移位 

寄存器中有数据是产生

USART_IT_TXE, 

//使能发送中断,在发送完数据 

后产生。

一般情况下,如果与PC通信的话,我们只用接受中断即可。

(3) 

串口使能

USART_Cmd(USART1, 

//USART1使能

好了,经过以上不走之后呢,我们就可以进行数据的收发了。

3、发送数据

使用函数USART_SendData(USART1, 

char 

data),一次只能发送一个字符。

当然我们可以用如下函数发送字符串。

USART1_Puts(char 

str) 

while(*str) 

USART_SendData(USART1, 

*str++);

//发送一个字符

while(USART_GetFlagStatus(USART1, 

USART_FLAG_TXE) 

== 

RESET);

//等待发送完毕

当然我们也可以循环发送字符串数组

for(i 

TxBuf1 

!

'

\0'

;

i++) 

// 

TxBuf1为定义好的字符串数组

USART_SendData(USART2 

 

TxBuf1);

while(USART_GetFlagStatus(USART2, 

USART_FLAG_TC)==RESET);

4、接收数据

由于(yó

uyú

)我们使用的是接受中断,所以当有数据需要接收时,会执相应的中断函数。

此处我们USART1的中断(zhōngduà

n)函数在stm32f10x_it.c文件(wé

njià

n)中。

找到函数void 

USART1_IRQHandler(void),如果没有的话就自己加上吧,别忘了头文件中需要声明(shēngmí

ng)一下。

当然你也可以在其他文件中写下该中断函数。

当产生中断进入该函数之后,我们就可以进行自己的操作了。

USARTy_IRQHandler(void)

if(USART_GetITStatus(USARTy, 

USART_IT_RXNE) 

RESET)//如果寄存器中有数据

Read 

one 

byte 

from 

the 

receive 

data 

register 

RxBuffer1[RxCounter1++] 

USART_ReceiveData(USART1);

/*************************************************************

USART_IT_TXE) 

RESET)

USART_SendData(USARTy, 

TxBuffer1[TxCounter1++]);

//这个地方那个之所以把这个写出来主要是想说发送中断和接受中断其实是共用一个

//中断函数的,到底是那个中断发生了呢,这就需要我们读取中断状态标志来识别了。

*****************************************************************/

别忘了在接受完数据进行别的操作之前为了防止数据被覆盖最好先禁止一下接受中断 

禁止 

接收中断 

USART_ITConfig(USART1, 

DISABLE);

发送中断 

5、main函数

int 

main(void) 

//这个地方和特别,我们知道一般main函数是没有返回值的,但在STM32 

//的编程中其返回类型为int。

RCC_Configuration();

NVIC_Configuration();

GPIO_Configuration();

USART_InitStructure.USART_HardwareFlowControl= 

USART_HardwareFlowControl_None;

//USART_ITConfig(USART1, 

while 

(1)//等待(děngdà

i)中断

当然(dāngrá

n)你也可以在main()中添加一些发送指令(zhǐlì

ng)之类的东西。

以上内容(nè

iró

ng)为个人总结,转载请注明出处。

若有错误,本人概不负任何责任。

STM32外部中断配

NVIC_Configuration函数实现配置嵌套向量中断中断优先级并使能中断。

其中的NVIC_PriorityGroupConfig函数配置中断优先级的组织方式,STM32的嵌套向量中断控制器可以配置16个可编程的优先等级,使用了4位表示中断优先级(2的4此方就是16),16个可编程的优先等级又可以分为主优先级和次优先级,例如参数NVIC_PriorityGroup_1表示1bit主优先级(pre-emptionpriority)3bits次优先级(subpriority)。

一、配置中断

1、分配中断向量表:

/*SettheVectorTablebaselocationat0x20000000*/

NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);

2、设置中断优先级:

//设置中断优先级

3、初始化外部中断:

/*允许EXTI4中断*/

NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQChannel;

//中断通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=PreemptionPriorityValue;

//占先优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

//响应(次级)优先级

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

//通道中断使能

//初始化中断

注意:

如果我们配置的外部针脚为PA4,或PB4,或PC4,PD4等,那么采用的外部中断也必须是EXTI4,同样,如果外部中断针脚是PA1,PB1,PC1,PD1那么中断就要用EXTI1,其他类推。

二、配置(pè

)GPIO针脚作为外部(wà

ibù

)中断的触发事件

1、选择(xuǎnzé

)IO针脚(zhēnjiao)

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;

注意,如果的针脚是端口的4号针脚,配置的中断一定是EXTI4

2、配置针脚为输入

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

3、初始化针脚

GPIO_Init(GPIOD,&

3配置EXTI线,使中断线和IO针脚线连接上

1、将EXTI线连接到IO端口上

将EXTI线4连接到端口GPIOD的第4个针脚上

GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource4);

如果配置的针脚是4号,那么参数必须是GPIO_PinSource4

如果配置的针脚是3号,那么参数必须是GPIO_PinSource3

2、配置中断边沿

/*配置EXTI线4上出现下降沿,则产生中断*/

EXTI_InitStructure.EXTI_Line=EXTI_Line4;

注意:

如果配置的4号针脚,那么EXTI_Line4是必须的

EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

//下降沿触发

EXTI_InitStructure.EXTI_LineCmd=ENABLE;

//中断线使能

EXTI_Init(&

EXTI_InitStructure);

EXTI_GenerateSWInterrupt(EXTI_Line4);

//EXTI_Line4中断允许

到此中断配置完成,可以写中断处理函数。

举例:

配置函数

/*************************************************************************

*函数名 

NVIC_Configration

*描述 

配置各个中断寄存器

****************************************************************************/

voidNVIC_Configration(void)

NVIC_InitTypeDefNVIC_InitStructure;

//#ifdefVECT_TAB_RAM

/*SettheVectorTablebaselocationat0x20000000*/

NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);

//#else/*VECT_TAB_FLASH*/

/*SettheVectorTablebaselocationat0x08000000*/

//NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);

//#endif 

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

/*允许EXTI4中断*/

NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=PreemptionPriorityValue;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&

 

/*允许EXTI9中断*/

NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;

/*配置SysTick处理优先级:

优先级以及子优先级*/

/************************************************************************

配置TIM2针脚

************************************************************************/

voidGPIO_Configuration(void){

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;

GPIO_Init(GPIOC,&

/*配置(pè

)GPIOD的第一个管角为浮动(fú

ng)输入*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOD,&

)GPIOB的第9个管脚为浮动(fú

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;

GPIO_Init(GPIOB,&

/**************************************************************

*函数 

SysTick_Configuration

设置SysTick

***************************************************************/

voidSysTick_Configuration(void)

/*配置HCLK时钟做为SysTick时钟源*/

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

//系统时钟8分频72MHz

NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick,8,2);

/*SysTickInterrupteach1000HzwithHCLKequalto72MHz*/

SysTick_SetReload(9000);

//中断周期1ms

/*EnabletheSysTickInterrupt*/

SysTick_ITConfig(ENABLE);

//打开中断 

SysTick_CounterCmd(SysTick_Counter_Enable);

SysTick_CounterCmd(SysTick_Counter_Clear);

/***************************************************************************

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2