0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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);

}

然后是配置串口參數(shù)

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

* 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);

}

然后是在中斷設(shè)置,需要修改stm32f10x_it.c 中的串口中斷函數(shù) 并且需要修改void NVIC_Configuration(void)函數(shù)

修改NVIC_Configuration函數(shù)

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

* 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)

{

//處理接收到的數(shù)據(jù)

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

{

/* Clear the USART1 Receive interrupt */

USART_ClearITPendingBit(USART1, USART_IT_RXNE);

}

//發(fā)送中斷

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

{

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

if (Send_Length==SEND_LENGTH)

{

//發(fā)送字節(jié)結(jié)束

USART_ClearITPendingBit(USART1,USART_IT_TXE);

USART_ITConfig(USART1, USART_IT_TXE, DISABLE);

USART_ITConfig(USART1, USART_IT_TC, ENABLE);

}

}

//發(fā)送完成

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

{

USART_ClearITPendingBit(USART1,USART_IT_TC);

USART_ITConfig(USART1, USART_IT_TC, DISABLE);

}

}

在需要發(fā)送的程序里Send_Data[SEND_LENGTH]和發(fā)送長度設(shè)置好,

void Send_to_PC(void)

{

//設(shè)置好Send_Data[SEND_LENGTH]數(shù)組

//打開發(fā)送中斷

USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

}

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10846

    瀏覽量

    353763
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    stm32串口燒錄怎么設(shè)置

    準(zhǔn)備工作 確保您擁有STM32開發(fā)板和相應(yīng)的硬件設(shè)備,如USB轉(zhuǎn)串口模塊。 安裝STM32CubeMX和STM32CubeProgrammer軟件,這些是ST官方提供的工具,用于
    的頭像 發(fā)表于 08-22 09:33 ?862次閱讀

    STM32G030F6用串口中斷函數(shù)接收數(shù)據(jù),發(fā)送數(shù)據(jù)就死機(jī)怎么解決?

    平臺(tái)介紹: 芯片是使用的STM32G030F6,系統(tǒng)是rt-thread nano-v3.1.5, 使用rtthread studio + cubemx生成工程項(xiàng)目 問題描述:想使用串口中斷方式去
    發(fā)表于 07-11 06:44

    STM32G030不能再次進(jìn)入串口中斷的原因?

    在使用串口時(shí)數(shù)據(jù)發(fā)送完畢 將串口設(shè)置為外部中斷,然后MCU進(jìn)入停止模式。在觸發(fā)外部喚醒后,進(jìn)入外部觸發(fā)中斷 ,再次初始化串口后,再接收
    發(fā)表于 05-17 10:38

    求助,關(guān)于串口中斷問題求解

    串口中斷問題 int main (void) { I2C_EE_Init(); /* 串口1初始化 */ USART1_Config(); NVIC_Configuration(); while
    發(fā)表于 05-15 06:55

    stm32cubemx的串口中斷接收時(shí),過一段時(shí)間串口中斷不進(jìn)了怎么解決?

    個(gè)小時(shí)多串口中斷進(jìn)不去了,我用兩根線掛在總線上在電腦上用串口助手監(jiān)聽收發(fā)的數(shù)據(jù),發(fā)送和應(yīng)答的過程還在持續(xù),其他功能也都正常只是cubemx的程序認(rèn)為沒有收到數(shù)據(jù)。很難定位是哪里的問題。
    發(fā)表于 04-17 06:48

    STM32L051使用HAL庫串口中斷的疑問求解

    使用STM32CUB生成原始代碼,然后采用串口中斷接收 L051有兩個(gè)串口,串口1,串口2,以及一個(gè)低功耗
    發(fā)表于 04-08 07:17

    stm32串口接收中斷觸發(fā)原理

    配置串口接收中斷使能:在初始化串口時(shí),需要設(shè)置相應(yīng)的控制寄存器來使能串口接收中斷。這通??梢酝ㄟ^
    發(fā)表于 01-17 15:42 ?7218次閱讀
    <b class='flag-5'>stm32</b><b class='flag-5'>串口</b>接收<b class='flag-5'>中斷</b>觸發(fā)原理

    stm32中斷怎么處理的

    中斷是指在程序執(zhí)行過程中,由硬件或軟件的觸發(fā)而打斷正常的程序執(zhí)行流程,暫時(shí)轉(zhuǎn)去執(zhí)行特定的處理程序,并在完成后返回原來的程序流程。中斷可以分為硬件中斷和軟件中斷。 硬件
    的頭像 發(fā)表于 01-02 17:35 ?2315次閱讀

    如何通過配置串口的接收作為中斷

    使用中斷 通過配置串口的接收作為中斷源,開啟中斷輸出控制,配置NVIC。開啟
    的頭像 發(fā)表于 11-10 16:33 ?488次閱讀
    如何通過<b class='flag-5'>配置</b><b class='flag-5'>串口</b>的接收作為<b class='flag-5'>中斷</b>源

    串口STM32中的配置

    首先要明確幾點(diǎn):使用STM32串口外設(shè)中的哪一個(gè)?串口發(fā)送或者接收數(shù)據(jù)?串口相關(guān)的參數(shù)配置?發(fā)送或接收是否使用到
    的頭像 發(fā)表于 11-10 16:09 ?2058次閱讀
    <b class='flag-5'>串口</b>在<b class='flag-5'>STM32</b>中的<b class='flag-5'>配置</b>

    STM32基于標(biāo)準(zhǔn)外設(shè)庫的外部中斷配置

    本文介紹了STM32基于標(biāo)準(zhǔn)外設(shè)庫的外部中斷配置,以及基于參考手冊如何更加寄存器配置外部中斷
    的頭像 發(fā)表于 11-02 14:13 ?1578次閱讀
    <b class='flag-5'>STM32</b>基于標(biāo)準(zhǔn)外設(shè)庫的外部<b class='flag-5'>中斷</b><b class='flag-5'>配置</b>

    STM32如何配置外部中斷?STM32外部中斷配置步驟

    STM32如何配置外部中斷?STM32外部中斷配置步驟? 作為一款現(xiàn)代化的微控制器,
    的頭像 發(fā)表于 10-26 17:47 ?3217次閱讀

    STM32串口中斷及DMA接收常見的幾個(gè)問題

    STM32串口中斷及DMA接收常見的幾個(gè)問題
    的頭像 發(fā)表于 10-26 16:41 ?3277次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口中斷</b>及DMA接收常見的幾個(gè)問題

    HAL_UART_Transmit阻塞時(shí)會(huì)影響串口中斷接收嗎?

    最近項(xiàng)目里使用了兩路串口透傳數(shù)據(jù),串口3中斷接收數(shù)據(jù),組包后通過串口1阻塞發(fā)送出去。
    的頭像 發(fā)表于 10-26 14:24 ?1626次閱讀
    HAL_UART_Transmit阻塞時(shí)會(huì)影響<b class='flag-5'>串口中斷</b>接收嗎?

    STM32串口中斷接收不定長報(bào)文介紹

    本項(xiàng)目中,需要使用STM32的USART6串口與FPGA板(下位機(jī))通信,需要發(fā)送和接收數(shù)據(jù),有報(bào)文應(yīng)答機(jī)制。
    的頭像 發(fā)表于 10-26 11:01 ?919次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口中斷</b>接收不定長報(bào)文介紹