娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

Stm32使用Usart代碼例子(輪詢、中斷、DMA)

發(fā)布者:Xiangsi最新更新時間:2024-10-09 來源: cnblogs關鍵字:Stm32  Usart  輪詢  中斷  DMA 手機看文章 掃描二維碼
隨時隨地手機看文章

stm32使用庫函數(shù)編寫USART還是很方便的,現(xiàn)在轉幾個例子:


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

轉載請注明出處:tedeum.iteye.com 

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

 首先是不使用中斷的方法使用usart1,管腳pa9,pa10,此方法已在f3discovery上驗證通過,來源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2Fusart%20code&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=524


// STM32 USART1 (Tx PA.9, Rx PA.10) STM32F3-Discovery - sourcer32@gmail.com  

   

#include 'stm32f30x.h'  

   

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

    

void RCC_Configuration(void)  

{  

  /* Enable GPIO clock */  

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);  

   

  /* Enable USART clock */  

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);  

}  

   

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

    

void GPIO_Configuration(void)  

{  

  GPIO_InitTypeDef GPIO_InitStructure;  

   

  /* Connect PA9 to USART1_Tx */  

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_7);  

   

  /* Connect PA10 to USART1_Rx */  

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7);  

   

  /* Configure USART Tx as alternate function push-pull */  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  

  GPIO_Init(GPIOA, &GPIO_InitStructure);  

   

  /* Configure USART Rx as alternate function push-pull */  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  

  GPIO_Init(GPIOA, &GPIO_InitStructure);  

}  

   

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

   

void USART1_Configuration(void)  

{  

  USART_InitTypeDef USART_InitStructure;  

   

  /* USART resources configuration (Clock, GPIO pins and USART registers) ----*/  

  /* USART configured as follow: 

        - BaudRate = 115200 baud 

        - Word Length = 8 Bits 

        - One Stop Bit 

        - No parity 

        - Hardware flow control disabled (RTS and CTS signals) 

        - Receive and transmit enabled 

  */  

  USART_InitStructure.USART_BaudRate = 115200;  

  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 configuration */  

  USART_Init(USART1, &USART_InitStructure);  

   

  /* Enable USART */  

  USART_Cmd(USART1, ENABLE);  

}  

   

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

   

int main(void)  

{  

  RCC_Configuration();  

    

  GPIO_Configuration();  

    

  USART1_Configuration();  

    

  while(1)  

  {  

    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // Wait for Empty  

    

    USART_SendData(USART1, 0x49); // Send 'I'  

  }  

    

  while(1); // Don't want to exit  

}  

   

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

   

#ifdef  USE_FULL_ASSERT  

   

/** 

  * @brief  Reports the name of the source file and the source line number 

  *         where the assert_param error has occurred. 

  * @param  file: pointer to the source file name 

  * @param  line: assert_param error line source number 

  * @retval None 

  */  

void assert_failed(uint8_t* file, uint32_t line)  

{  

  /* User can add his own implementation to report the file name and line number, 

     ex: printf('Wrong parameters value: file %s on line %drn', file, line) */  

   

  /* Infinite loop */  

  while (1)  

  {  

  }  

}  

#endif  


接下來是使用中斷的方法,使用USART3,管腳pd8,pd9,來源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/STM32F4%20USART%20receive%20problem&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=124


// STM32 USART IRQ TX/RX Loop (USART3 Tx PD.8, Rx PD.9) STM32F4 Discovery - sourcer32@gmail.com  

   

#include 'stm32f4_discovery.h'  

   

volatile char StringLoop[] = 'The quick brown fox jumps over the lazy dogrn';  

   

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

   

void RCC_Configuration(void)  

{  

  /* --------------------------- System Clocks Configuration -----------------*/  

  /* USART3 clock enable */  

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);  

   

  /* GPIOD clock enable */  

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);  

}  

   

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

   

void GPIO_Configuration(void)  

{  

  GPIO_InitTypeDef GPIO_InitStructure;  

   

  /*-------------------------- GPIO Configuration ----------------------------*/  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;  

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

  GPIO_Init(GPIOD, &GPIO_InitStructure);  

   

  /* Connect USART pins to AF */  

  GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART3);  

  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_USART3);  

}  

   

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

   

void USART3_Configuration(void)  

{  

    USART_InitTypeDef USART_InitStructure;  

   

  /* USARTx configuration ------------------------------------------------------*/  

  /* USARTx configured as follow: 

        - BaudRate = 9600 baud 

        - Word Length = 8 Bits 

        - One Stop Bit 

        - No parity 

        - Hardware flow control disabled (RTS and CTS signals) 

        - Receive and transmit enabled 

  */  

  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(USART3, &USART_InitStructure);  

   

  USART_Cmd(USART3, ENABLE);  

  

 USART_ITConfig(USART3, USART_IT_TXE, ENABLE);  

  

 USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);  

}  

   

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

   

void NVIC_Configuration(void)  

{  

  NVIC_InitTypeDef NVIC_InitStructure;  

   

  /* Configure the NVIC Preemption Priority Bits */  

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  

   

  /* Enable the USART3 Interrupt */  

  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;  

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  NVIC_Init(&NVIC_InitStructure);  

}  

   

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

   

void USART3_IRQHandler(void)  

{  

  static int tx_index = 0;  

[1] [2] [3]
關鍵字:Stm32  Usart  輪詢  中斷  DMA 引用地址:Stm32使用Usart代碼例子(輪詢、中斷、DMA)

上一篇:STM32點LED燈
下一篇:STM32配置IIC接口通信方式參考源碼

推薦閱讀最新更新時間:2025-06-19 08:09

基于STM32H563 USART演示DMA鏈表功能
這里選用STM32H563Nucleo開發(fā)板,使用USART3外設演示DMA鏈表模式的實現(xiàn)過程。大致過程是這樣的: STM32H563芯片上的USART3與板載STLINK的VCP相連,通過PC端串口助手軟件先后發(fā)送3串字符給MCU,MCU的USART3通過DMA以鏈表模式依次接收并存到相應內(nèi)存,同時在相應的調(diào)試界面的觀察窗口加以顯示。接收過程對應3個DMA接收節(jié)點,他們構成1個DMA接收隊列。當MCU接收到3串字符后,也以DMA 鏈表模式依次發(fā)送3串字符到PC端的串口助手并顯示出來。同樣,USART3的DMA 發(fā)送也用到3個節(jié)點以組成1個DMA發(fā)送隊列。 GPDMA1的2個通道CH0,CH1,配置在鏈表模式。其中CH0用于U
[單片機]
基于STM32H563 <font color='red'>USART</font>演示<font color='red'>DMA</font>鏈表功能
STM32之旅4——USART
串口也是用的比較多的,在STM32CubeMX中生成代碼后,需要添加一些代碼才可以用。 drv_usart.h: #ifndef __DRV_USART_H #define __DRV_USART_H #define USART1_MAX_LEN 64 //接收區(qū)長度 #define USART1_BUFF_CACHE_LEN 1 //接收緩沖區(qū)長度 extern uint16_t g_usart1_sta; //接收狀態(tài) ,最高位為接收完成標志 extern uint8_t g_usart1_buff ; //接收buff extern uint8_t g_usart1_buff_cache ; //接
[單片機]
STM32初學筆記4之USART
=========================== 文件分割線 =============================== /** ** 文件名稱:BSP_ALIENTEK.H ** 功能描述:ALIENTEK開發(fā)板板級支持包聲明 ** 硬件平臺:STM32F103RBT6 Development Board ** 編譯環(huán)境:Keil uversion4 IDE ** 版本信息:v0.2 ** 編寫作者:唐華明 ** 編寫時間:2011.11.26 ** 附加說明:無 ** 修改記錄:2011-11-26 將DS0Off() GPIO_SetBits(GPIOD, GPIO_Pin_8)修改為 **
[單片機]
STM32的ADC1采集多條通道 可以不使用DMA功能嗎?
類似的問題 為什么我采集5條通道的電壓,而采集到的值卻都是第一條的呢? 我什么時候需要使用DMA功能? Ⅰ 關于ADC的一些知識 STM32的ADC是一種12位逐次逼近型的模擬數(shù)字轉換器。它有多達18條通道,可測量16個外部和2個內(nèi)部信號源。 各通道的A/D轉換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。 ADC的結果可以左對齊或右對齊方式存儲在16位數(shù)據(jù)寄存器ADC_DR中。 其實就是說,一個ADC,可檢測18條通道,我們外接的只有16條。而結果只保存在一個寄存器ADC_DR中。 要使用ADC1采集多條通道,那么就需要對采集的通道進行分組排序。STM32的ADC可以把轉換組織成兩組:規(guī)則組和注入組。 假如我們采集的通道按照如下順
[單片機]
<font color='red'>STM32</font>的ADC1采集多條通道 可以不使用<font color='red'>DMA</font>功能嗎?
STM32DMA—直接存儲器存取(原理篇)
一、DMA是什么? 直接存儲器存取(DMA)用來提供在外設和存儲器之間或者存儲器和存儲器之間的高速數(shù)據(jù)傳輸。無須CPU干預,數(shù)據(jù)可以通過DMA快速地移動,這就節(jié)省了CPU的資源來做其他操作。兩個DMA控制器有12個通道(DMA1有7個通道,DMA2有5個通道),每個通道專門用來管理來自于一個或多個外設對存儲器訪問的請求。還有一個仲裁器來協(xié)調(diào)各個DMA請求的優(yōu)先權。FLASH、SRAM、外設的SRAM、APB1、APB2和AHB外設均可作為訪問的源和目標! 二、DMA的工作原理是什么? 1.DMA的工作流程分析 在發(fā)生一個事件后,外設向DMA控制器發(fā)送一個請求信號。DMA控制器根據(jù)通道的優(yōu)先權處理請求。當DMA控制器開始
[單片機]
STM32串口DMA容易忽視的問題
博主昨天晚上在STM32串口DMA的問題上糾結了好長時間,所以今天上午寫篇博客來談談我對串口DMA發(fā)送的理解→_→今天主要討論三個問題:1、什么叫串口DMA 請求;2、串口簡要復習;3、串口DMA發(fā)送流程。 1、什么叫串口DMA 請求(博主用的是戰(zhàn)艦STM32開發(fā)板) 說這個問題之前先簡單回顧DMA的基本特性。先導出原子哥的PPT內(nèi)容: DMA全稱Direct Memory Access,即直接存儲器訪問。 DMA傳輸將數(shù)據(jù)從一個地址空間復制到另一個地址空間。當CPU初始化這個傳輸動作,傳輸動作本身是由DMA控制器來實現(xiàn)和完成的。 STM32有兩個DMA控制器(DMA2只存在于大容量產(chǎn)品中),DMA1有7個通道
[單片機]
<font color='red'>STM32</font>串口<font color='red'>DMA</font>容易忽視的問題
stm32 dma方式發(fā)脈沖做位置控制
考慮到現(xiàn)有板子上沒有fpga,對于dma方式發(fā)脈沖做位置控制設計如下 兩個buff short buff1 ; short buff2 ; 里面都存放頻率值,也就是說arp寄存器的值。 數(shù)組的長度為1000,是考慮到最高的脈沖頻率,如果最大頻率比較小,則可以適當減少數(shù)組的大小,之所以定義兩個buff,是考慮到每個伺服周期計算填充一個buff,同時另一個buff就作為當前dma之用,每個伺服周期結束的時候會停止dma,然后統(tǒng)計已發(fā)脈沖數(shù)量,然后切換到剛剛填充好的buff,然后啟動dma發(fā)脈沖。 因為dma發(fā)脈沖更新的寄存器是arp,對于ccr脈寬寄存器,則每個伺服周期開始的時候,程序自己填充即可。 上面的dma發(fā)送的方法,優(yōu)點是
[單片機]
STM32 定時器中斷配置心得【自用】
1.IO配置 略 2.TIM配置 void TIM2_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period =359999; TIM_TimeBaseStructure.TIM_Prescaler = 99; TIM_TimeBas
[單片機]
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 南宫市| 鸡东县| 沈丘县| 玛多县| 康定县| 壤塘县| 花莲市| 随州市| 星座| 灵宝市| 莫力| 临西县| 绥棱县| 仁怀市| 江油市| 页游| 奉新县| 眉山市| 广宗县| 营口市| 威海市| 望谟县| 中超| 河北区| 遂川县| 防城港市| 阿拉善盟| 渑池县| 闽清县| 宁乡县| 拉萨市| 万全县| 徐州市| 高唐县| 牙克石市| 成安县| 永吉县| 太康县| 三门峡市| 沭阳县| 阿城市|