久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: STM32 USART通過DMA發(fā)送程序 [打印本頁]

作者: sr861126    時間: 2019-5-29 10:48
標題: STM32 USART通過DMA發(fā)送程序
#include "stm32f10x.h"
#define se 3//傳輸?shù)淖止?jié)數(shù)
u32 SendBuff[3];
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
//毫秒級的延時
void delay_ms(u16 time)
{   
   u16 i=0;  
   while(time--)
   {
      i=12000;  //自己定義
      while(i--) ;   
   }
}
/***********************************************************************
************************************************************************/
void DMA_Config(void)

{
    DMA_InitTypeDef DMA_InitStructure;

   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);    //開啟DMA時鐘
                    //配置DMA中斷

     /*設置DMA源:內存地址&串口數(shù)據(jù)寄存器地址*/
  DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40013804;      

    /*內存地址(要傳輸?shù)淖兞康闹羔?*/
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;

    /*方向:從內存到外設*/        
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;   

    /*傳輸大小DMA_BufferSize=SENDBUFF_SIZE*/   
  DMA_InitStructure.DMA_BufferSize = se;

    /*外設地址不增*/        
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

    /*內存地址自增*/
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;   

    /*外設數(shù)據(jù)單位*/   
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;

    /*內存數(shù)據(jù)單位 8bit*/
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;     

    /*DMA模式:一次傳輸,循環(huán)*/
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;     

    /*優(yōu)先級:中*/   
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;  

    /*禁止內存到內存的傳輸    */
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

    /*配置DMA1的4通道*/           
    DMA_Init(DMA1_Channel4, &DMA_InitStructure);        

      DMA_Cmd (DMA1_Channel4,ENABLE);                    //使能DMA
      DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);  //配置DMA發(fā)送完成后產(chǎn)生中斷
}
        

//系統(tǒng)時鐘配置
void RCC_Configuration(void)
{  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//使能串口1的GPIO時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,  ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,  ENABLE);

}
/*****************************************************************************
*****************************************************************************/
//串口GPIO口配置
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

/* LED0*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);  
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);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //懸浮輸入
GPIO_Init(GPIOA, &GPIO_InitStructure);


USART_InitStructure.USART_BaudRate = 9600;      //設定波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;  //傳輸數(shù)據(jù)位數(shù)
USART_InitStructure.USART_StopBits = USART_StopBits_1;   //停止位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; //使用接收和發(fā)送功能
USART_Init(USART1, &USART_InitStructure);       //初始化串口1

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);     //使能串口1 讀中斷
USART_Cmd(USART1,ENABLE);  //串口1使能
USART_ClearFlag(USART1,USART_IT_TC );//發(fā)送完成中斷

}
/*****************************************************************************
*****************************************************************************/
//中斷配置
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);     //先占優(yōu)先權2,從優(yōu)先級2位
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;    //開串口中斷1
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;   //指定搶占優(yōu)先級別1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;    //指定相應優(yōu)先級別0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*****************************************************************************
*****************************************************************************/
void USART1_IRQHandler( u32 temp_trx)       //串口接收中斷,并將接收到得數(shù)據(jù)發(fā)送出
{

        
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//判斷 是否 接收中斷  
{
    temp_trx = USART_ReceiveData(USART1);
  USART_SendData(USART1,USART_ReceiveData(USART1));


}
}

int main(void)
{
RCC_Configuration();//系統(tǒng)時鐘配置
   DMA_Config();  
NVIC_Configuration();//中斷配置

GPIO_Configuration();//GPIO口配置
while(1)          //LED燈循環(huán)亮滅,串口循環(huán)發(fā)送ASCII“9”
{
  delay_ms(500);

USART_SendData(USART1,9);
  delay_ms(50);
         USART_SendData(USART1,0xdf);        
   delay_ms(50);
         USART_SendData(USART1,0xec);         
  delay_ms(50);
         GPIO_WriteBit(GPIOC,GPIO_Pin_13,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13)));

}
}



作者: PAIDAXINGG    時間: 2020-4-2 19:47
今天剛看到這里在學習DMA,看了你的程序   發(fā)現(xiàn)了一個不知道是不是問題的問題(我沒有找到使能USART的DMA請求函數(shù))
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);

我剛學  也不太懂
作者: sr861126    時間: 2020-9-17 17:26
PAIDAXINGG 發(fā)表于 2020-4-2 19:47
今天剛看到這里在學習DMA,看了你的程序   發(fā)現(xiàn)了一個不知道是不是問題的問題(我沒有找到使能USART的DMA請 ...

   串口的數(shù)據(jù)用DMA發(fā)送出去的,不占用中斷資源





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久草福利| 亚洲一区二区三区免费视频 | 国产三级| 欧美一级大片免费观看 | 成人精品鲁一区一区二区 | 视频一区二区中文字幕 | 人操人免费视频 | 日韩精品久久一区 | 久久综合久久综合久久 | 国产福利91精品一区二区三区 | 日韩中文在线观看 | 成人高清在线视频 | 亚洲影音先锋 | 成人在线小视频 | 亚洲精品粉嫩美女一区 | 人和拘一级毛片c | 波多野结衣二区 | 亚洲高清av | 天天干天天谢 | 国产一区二区免费 | 久久日韩精品一区二区三区 | 国产一区二区日韩 | 欧美精品一区二区在线观看 | 欧美精品久久久久 | 精品国产91乱码一区二区三区 | 免费久久久| 日韩精品 电影一区 亚洲 | 色成人免费网站 | 91精品亚洲 | 老司机精品福利视频 | 欧美激情在线观看一区二区三区 | 操网站| 免费不卡一区 | 日韩毛片在线免费观看 | 夜夜草| 国产色黄 | 成人av在线网站 | 韩国毛片一区二区三区 | 国产电影一区二区 | 理论片87福利理论电影 | 中文在线www|