0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的串口中断配置

电子工程师 2018-04-06 07:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

STM32的串口中断配置,也是很简单的.

首先是配置UART的GPIO口

首先是配置UART的GPIO口

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

* Name : UART1_GPIO_Configuration

* Deion : Configures the uart1 GPIO ports.

* Input : None

* Output : None

* Return : None

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

void UART1_GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

// Configure USART1_Tx as alternate push-pull

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

// Configure USART1_Rx as input floating

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

然后是配置串口参数

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

* Name : UART1_Configuration

* Deion : Configures the uart1

* Input : None

* Output : None

* Return : None

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

void USART_Configuration(void)

{

USART_InitTypeDef USART_InitStructure;

USART_ClockInitTypeDef USART_ClockInitStructure;

Uart1_GPIO_Configuration();

USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;

USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;

USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;

USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;

/* Configure the USART1 synchronous paramters */

USART_ClockInit(USART1, &USART_ClockInitStructure);

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;

/* Configure USART1 basic and asynchronous paramters */

USART_Init(USART1, &USART_InitStructure);

/* Enable USART1 Receive interrupts */

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

/* Enable USART1 */

USART_Cmd(USART1, ENABLE);

}

然后是在中断设置,需要修改stm32f10x_it.c 中的串口中断函数 并且需要修改void NVIC_Configuration(void)函数

修改NVIC_Configuration函数

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

* Name : NVIC_Configuration

* Deion : Configures NVIC and Vector Table base location.

* Input : None

* Output : None

* Return : None

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

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef VECT_TAB_RAM

/* Set the Vector Table base location at 0x20000000 */

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else /* VECT_TAB_FLASH */

/* Set the Vector Table base location at 0x08000000 */

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

/* Configure the NVIC Preemption Priority Bits */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

/* Enable the USART1 Interrupt */

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

//串口中断

void USART1_IRQHandler(void)

{

//处理接收到的数据

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

{

/* Clear the USART1 Receive interrupt */

USART_ClearITPendingBit(USART1, USART_IT_RXNE);

}

//发送中断

if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET)

{

USART_SendData(USART1, Send_Data[Send_Length++]);

if (Send_Length==SEND_LENGTH)

{

//发送字节结束

USART_ClearITPendingBit(USART1,USART_IT_TXE);

USART_ITConfig(USART1, USART_IT_TXE, DISABLE);

USART_ITConfig(USART1, USART_IT_TC, ENABLE);

}

}

//发送完成

if (USART_GetITStatus(USART1, USART_IT_TC) != RESET)

{

USART_ClearITPendingBit(USART1,USART_IT_TC);

USART_ITConfig(USART1, USART_IT_TC, DISABLE);

}

}

在需要发送的程序里Send_Data[SEND_LENGTH]和发送长度设置好,

void Send_to_PC(void)

{

//设置好Send_Data[SEND_LENGTH]数组

//打开发送中断

USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

}

至此 串口就可以工作起来了!~

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2313

    文章

    11195

    浏览量

    374655
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    cs32A010串口通讯问题

    串口中断接收数据,第一个数据是0,第二个才是正确的数据,而且最后一个字节放到了下一帧数据第一个。 pack包的串口中断例程跑的也有问题,读取串口数据为什么是两条一样的语句,是什么意思?
    发表于 04-13 12:35

    STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口

    仅是一部分常用的基础指令,更多更仔细的指令或者函数可以访问陶晶驰资料官网。 硬件和接线 硬件需要一块STM32F103C8T6的开发板,杜邦线诺干,2.4寸串口屏一块 接线 串口STM32
    的头像 发表于 02-10 17:07 559次阅读
    <b class='flag-5'>STM32</b>驱动<b class='flag-5'>串口</b>屏,<b class='flag-5'>STM32</b>F103C8T6<b class='flag-5'>串口</b>发送指令控制HMI<b class='flag-5'>串口</b>屏

    RK3588平台串口配置修改指南:切换至串口8

    在嵌入式开发中,串口作为基础调试接口至关重要。本文档针对 RK3588 平台,详细介绍如何将系统默认串口修改为串口 8(UART8),包括 U-Boot 阶段和内核阶段的配置调整。该修
    的头像 发表于 02-01 16:37 1388次阅读

    CW32L083demo板,用串口中断去唤醒的话,如果波特率高于9600,会丢字节吗?

    请问各位大神,CW32L083demo板,用串口中断去唤醒的话,如果波特率高于9600,会丢字节吗?
    发表于 01-29 06:22

    串口中断和定时中断,外部中断在一起如何调用?

    当系统有个定时中断。 比如定时采集温度值,然后通过串口发送到上位机。这样程序里要用到定时中断串口中断 比如定时1s采样一次。那么是1s内调用串口中
    发表于 01-14 06:25

    CS32L010系列能否支持串口的发送和接收中断单独配置?不同中断中断优先级如何设置?

    1、串口能否配置成阻塞式发送和中断式接收。 2、不同中断中断优先级如何设置?我在开启中断函数代
    发表于 12-10 18:46

    串口空闲中断串口超时中断介绍

    1. 空闲中断(Idle Interrupt) 触发条件 当串口总线在接收数据后持续保持空闲状态(如高电平)超过一帧时间(即一个字符传输时间)时触发。 硬件自动检测总线空闲状态,与数据长度无关
    发表于 11-21 08:31

    串口中断触发卡死怎么解决?

    当用下列代码运行时,串口中断可以正常触发,回环数据接受正常。 #define UART_BAUDRATE 115200static void uart_pinmux_init(void
    发表于 11-11 06:17

    E203串口中断使用总结

    一、串口中断参数设置 与STM32串口中断不同,E203的串口中断标志位是自动清零的,也就是说,只要进入了串口中断服务函数并且执行完
    发表于 10-22 07:34

    使用串口485线程,发现收到数据回调函数一直没有运行是怎么回事?

    ,引脚PB6和PB7,串口配置没有问题,开机可以正常打印,如下图。 发送485指令,通过打印和debug发现信号量一直为-2,且收到数据会自动进入串口中断函数,不会进入我写的线程中接收。 我这边硬件上有485自动引脚切
    发表于 09-18 06:03

    求助,关于stm32H7多DMA数据流问题求解

    情况如下:stm32H7配置了一个adc进行采样,通过dma进行数据传输,串口接收和发送命令,用两个dma数据流通道,采用的空闲中断。 问题:adc一直在
    发表于 07-29 15:02

    STM32L431偶发串口乱码的原因?怎么解决?

    项目现场发现有些设备有时下发数据没反应,该设备由STM32L431外接模块来接收网络数据。经过排查,发现乱码发生时,外接设备发出的数据无乱码,STM32L431的对应该外接设备的串口中断服务程序
    发表于 06-19 06:46

    STM32CubeMX配置STM32G070RBT6TR时为什么无法使能PVD中断

    STM32CubeMX 配置STM32G070RBT6TR时无法使能PVD中断
    发表于 06-18 07:59

    stm32N657配置USART2,可以发送,但是为什么无法进入接收中断呢?

    串口2,中断配置了,编写接收回调函数,无法进入,但是可以正常发送。请问大家能不能帮我看看代码啊?找了一天没找到问题。
    发表于 06-18 07:13

    STM32CubeMX配置STM32G070RBT6TR时无法使能PVD中断怎么办?

    STM32CubeMX 配置STM32G070RBT6TR时无法使能PVD中断
    发表于 06-16 06:32