国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 6243|回復(fù): 0
打印 上一主題 下一主題

[提問] 輸入數(shù)據(jù)沒后USART沒有出現(xiàn)空閑,DMA沒有接受到數(shù)據(jù),DMA1_Channel5沒有接收到數(shù)據(jù)觸

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2014-1-10 11:33:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)鍵詞: STM32 , USART+DMA問題
#include "stm32f10x.h"
u8 USART1_SEND_DATA[512];
u8 USART1_RECEIVE_DATA[512];
u8 USART1_TX_Finish=1;// USART1發(fā)送完成標(biāo)志量
void USART1_Init(void); //串口1的初始化函數(shù), TX1(PA9), RX1(PA10)
void DAM_Init(void);
void NVIC_Configuration(void);
void GPIO_Configuration(void);
int main(void)
{
USART1_Init();
DAM_Init();
NVIC_Configuration();
GPIO_Configuration();

while(1)
{
}
}
void USART1_Init(void)  
{
   USART_InitTypeDef USART_InitStruct;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
   USART_Cmd(USART1, ENABLE);
USART_InitStruct.USART_BaudRate = 9600;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStruct);
USART_Cmd(USART1, ENABLE);
}
void DAM_Init(void)
{
   DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
//DMA初始化配置
    DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t)&USART1->DR; //0x40013804;
// DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)USART1_SEND_DATA;;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;    //外設(shè)作為傳輸?shù)哪康?br /> // DMA_InitStructure.DMA_BufferSize = 512;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel4, &DMA_InitStructure);

/*使USART1 DMA RX 打開*/
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
DMA_Cmd(DMA1_Channel4, ENABLE);
//如果使能了DMA接收
DMA_InitStructure.DMA_PeripheralBaseAddr =  (uint32_t)&USART1->DR;//  0x40013804;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)USART1_RECEIVE_DATA;;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;   //外設(shè)作為傳輸?shù)膩碓?br /> DMA_InitStructure.DMA_BufferSize = 512;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel5, &DMA_InitStructure);         
/* 使USART1 DMA TX 打開 */
USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
DMA_Cmd(DMA1_Channel5, ENABLE);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure1;
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//接收中斷使能,此步驟很重要!!!
//  USART_ITConfig(USART1, USART_IT_IDLE , ENABLE);//開啟空閑,幀錯(cuò),噪聲,校驗(yàn)錯(cuò)中斷
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

  //DMA發(fā)送中斷配置
NVIC_InitStructure1.NVIC_IRQChannel = DMA1_Channel4_IRQn;
NVIC_InitStructure1.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure1.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure1.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure1);
//開啟DMA中斷
DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE);
// DMA_ITConfig(DMA1_Channel4, DMA_IT_TE, ENABLE);
  //DMA接收中斷配置
NVIC_InitStructure1.NVIC_IRQChannel = DMA1_Channel5_IRQn;
NVIC_InitStructure1.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure1.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure1.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure1);
//開啟DMA中斷
DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE);
// DMA_ITConfig(DMA1_Channel5, DMA_IT_TE, ENABLE);
}
void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
//使能串口1和GPIOA時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
//配置管腳
//TX(PA9)配置為復(fù)用推挽輸出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
// GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
//RX(PA10)配置為浮空輸入
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
// GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
//DMA1_Channel4中斷服務(wù)函數(shù)
//USART1使用DMA發(fā)數(shù)據(jù)中斷服務(wù)程序
void DMA1_Channel4_IRQHandler(void)
{
  DMA_ClearITPendingBit(DMA1_IT_TC4);  //清除DMA通道x中斷待處理標(biāo)志位、傳輸完成中斷
  DMA_ClearITPendingBit(DMA1_IT_TE4); //清除DMA通道x中斷待處理標(biāo)志位、傳輸錯(cuò)誤中斷
  DMA_Cmd(DMA1_Channel4, DISABLE);//關(guān)閉DMA
  USART1_TX_Finish=1;//置DMA傳輸完成
}
//DMA1_Channel5中斷服務(wù)函數(shù)
void DMA1_Channel5_IRQHandler(void)       //   問題是   接受中斷沒有接收到數(shù)據(jù)完成觸發(fā)
{
  DMA_ClearITPendingBit(DMA1_IT_TC5); //清除DMA通道x中斷待處理標(biāo)志位、傳輸完成中斷
  DMA_ClearITPendingBit(DMA1_IT_TE5);
  DMA_Cmd(DMA1_Channel5, DISABLE);//關(guān)閉DMA,防止處理其間有數(shù)據(jù)
  DMA1_Channel5->CNDTR = 580;//重裝填
  DMA_Cmd(DMA1_Channel5, ENABLE);//處理完,重開DMA
}
void USART1_IRQHandler(void)
{
u16 DATA_LEN;
u16 i;
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//如果為空閑總線中斷      //程序到這里無法往下執(zhí)行
    {
  DMA_Cmd(DMA1_Channel5, DISABLE);//關(guān)閉DMA,防止處理其間有數(shù)據(jù)
    DATA_LEN=512-DMA_GetCurrDataCounter(DMA1_Channel5);   //512-剩余待傳數(shù)量=數(shù)據(jù)數(shù)量
  if(DATA_LEN > 0)
        {   
   while(USART1_TX_Finish==0);//等待數(shù)據(jù)傳輸完成才下一次
   
            for(i=0;i             {
               USART1_SEND_DATA[i]= (uint8_t)USART_ReceiveData(USART1);
      // USART1_SEND_DATA[i]=USART1_RECEIVE_DATA[i];
            }
            //USART用DMA傳輸替代查詢方式發(fā)送,克服被高優(yōu)先級中斷而產(chǎn)生丟幀現(xiàn)象。
            DMA_Cmd(DMA1_Channel4, DISABLE); //改變datasize前先要禁止通道工作
            DMA1_Channel4->CNDTR=DATA_LEN; //DMA1,傳輸數(shù)據(jù)量   DMA_SetCurrDataCounter(DMA1_Channel4,DATA_LEN);  
            USART1_TX_Finish=0;//DMA傳輸開始標(biāo)志量
            DMA_Cmd(DMA1_Channel4, ENABLE);   
  }
  //DMA_Cmd(DMA1_Channel5, DISABLE);//關(guān)閉DMA,防止處理其間有數(shù)據(jù)
  DMA_ClearFlag(DMA1_FLAG_GL5 | DMA1_FLAG_TC5 | DMA1_FLAG_TE5 | DMA1_FLAG_HT5);//清標(biāo)志
  DMA1_Channel5->CNDTR = 512;//重裝填
  DMA_Cmd(DMA1_Channel5, ENABLE);//處理完,重開DMA
  i = USART1->SR;  
        i = USART1->DR; //清USART_IT_IDLE標(biāo)志
}
if(USART_GetITStatus(USART1, USART_IT_PE | USART_IT_FE | USART_IT_NE) != RESET)//出錯(cuò)
{
  USART_ClearITPendingBit(USART1, USART_IT_PE | USART_IT_FE | USART_IT_NE);  //奇偶錯(cuò)誤中斷
}
   USART_ClearITPendingBit(USART1, USART_IT_TC);  //清除USARTx的中斷待處理位,傳輸完成中斷
   USART_ClearITPendingBit(USART1, USART_IT_IDLE);  //清除USARTx的中斷待處理位,空閑總線中斷
}

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

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频一区二区三区经 | 国产91短视频 | 欠操h| 狠狠色丁香婷婷综合久久来 | 国产高清在线观看麻豆 | 亚洲自拍偷拍区 | 天堂新版资源中文最新版下载地址 | 朋友的母亲hd中字在线观看 | 欧美日韩精品一区二区三区不卡 | www.五月婷婷 | 国产精品俺来也在线观看了 | 爱爱综合社区 | 国产一级黄色大片 | 尻美女 | 欧美大片一区二区三区 | 全部老头和同性老头xxxxx | 欧美日韩一级大片 | 欧美精品久久一区二区三区 | 日韩免费一区二区三区在线 | 国产女明星专区视频在线播放 | 国产99re在线观看只有精品 | 在线观看国产精品入口 | 国产乱对白刺激视频 | 亚洲欧美日韩在线不卡中文 | 四虎b7s22c0m | 羞羞视频免费网站欧美 | 青青青国产色视频在线观看 | 亚洲一区二区三区高清 不卡 | 欧美片免费观看网址 | 黄网站在线观看视频 | 久久天天躁狠狠躁夜夜2020一 | 香蕉视频网页版 | 国产一区自拍视频 | 国产激情视频 | 亚洲aⅴ久久久噜噜噜噜 | 久久久噜久噜久久综合 | 4hu四虎最新免费地址 | 成人动漫久久 | www.91| 亚洲国产精品免费观看 | 久久新视频|