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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3539|回復: 2
收起左側

STM32 USART通過DMA發送程序

[復制鏈接]
ID:302293 發表于 2019-5-29 10:48 | 顯示全部樓層 |閱讀模式
#include "stm32f10x.h"
#define se 3//傳輸的字節數
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源:內存地址&串口數據寄存器地址*/
  DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40013804;      

    /*內存地址(要傳輸的變量的指針)*/
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;   

    /*外設數據單位*/   
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;

    /*內存數據單位 8bit*/
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;     

    /*DMA模式:一次傳輸,循環*/
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;     

    /*優先級:中*/   
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發送完成后產生中斷
}
        

//系統時鐘配置
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;  //傳輸數據位數
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; //使用接收和發送功能
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 );//發送完成中斷

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

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


}
}

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

GPIO_Configuration();//GPIO口配置
while(1)          //LED燈循環亮滅,串口循環發送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)));

}
}


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:721221 發表于 2020-4-2 19:47 | 顯示全部樓層
今天剛看到這里在學習DMA,看了你的程序   發現了一個不知道是不是問題的問題(我沒有找到使能USART的DMA請求函數)
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);

我剛學  也不太懂
回復

使用道具 舉報

ID:302293 發表于 2020-9-17 17:26 | 顯示全部樓層
PAIDAXINGG 發表于 2020-4-2 19:47
今天剛看到這里在學習DMA,看了你的程序   發現了一個不知道是不是問題的問題(我沒有找到使能USART的DMA請 ...

   串口的數據用DMA發送出去的,不占用中斷資源
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲三区在线观看 | 国产精品视频网 | 日韩欧美视频 | 老妇激情毛片免费 | 蜜桃一区二区三区 | 精品一区二区三区在线观看国产 | 日本精品一区二区三区视频 | 亚洲日本成人 | 日韩午夜网站 | 欧美日韩高清免费 | 国产91色在线 | 亚洲 | 综合色久 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 亚洲欧美在线免费观看 | 日本不卡免费新一二三区 | www.免费看片.com | 国产精品久久久久久婷婷天堂 | 欧美在线日韩 | 欧美色综合一区二区三区 | 国产福利在线看 | 久久久久久高潮国产精品视 | 国产精品视频在线免费观看 | 日本一区二区三区免费观看 | 亚洲欧美久久 | 国产精品日韩 | 亚洲视频1区 | 黄色av一区| 久久午夜精品 | 久久亚洲综合 | 91精品免费视频 | 99pao成人国产永久免费视频 | 亚洲精品久久久久久国产精华液 | 91久久久久久久 | 精品国产18久久久久久二百 | 精国产品一区二区三区 | 性在线 | 精品国产精品三级精品av网址 | 91 视频网站 | 日韩精品一区二区三区中文在线 | 黄色大片网 | 国产精品一区二区三区四区五区 |