你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
andrewz 发表于 2016-9-27 09:17 这么复杂,还要用DMA... DMA不是会占用数据总线吗?
风子 发表于 2016-9-27 09:21 呵呵,频繁进中断,计算不受影响才怪了
查看全部评分
STM32隐藏
5.18活动板子会不会是STM32L4呢
STM32 CUBE软件中找不到STM32L4系列单片机
Your UAT Feedback is needed within today.
应用
AAA
测试测试12345
群
tiwen
BBBB
呵呵,频繁进中断,计算不受影响才怪了
哦,这样,一次发送十几个字节,确实也可以算得上是比较频繁了.
用DMA试试了..
DMA,貌似很复杂的..
修改成DMA之后,确实没有再出现#1.QNAN问题.
原本以为MCU会非常勤劳的切换,现在看,也有累趴下的时候。。
越来越欢乐了.
unsigned char g_o_buf_0[UART1_O_BUF_SIZE];
void Uart::init_UART1(void){
SET_BIT(RCC->APB2ENR,RCC_APB2ENR_USART1EN);
SET_BIT(RCC->AHBENR,RCC_AHBENR_GPIOAEN);
GPIOA->AFR[1]|=(1<<4)|(1<<8);
GPIOA->PUPDR|=GPIO_PUPDR_PUPDR9_0|GPIO_PUPDR_PUPDR10_0;
GPIOA->OSPEEDR|=GPIO_OSPEEDR_OSPEEDR9|GPIO_OSPEEDR_OSPEEDR10;
GPIOA->MODER|=GPIO_MODER_MODER9_1|GPIO_MODER_MODER10_1;
USART1->BRR=F_CPU/UART1_BAUDRATE;
NVIC_EnableIRQ(USART1_IRQn);
SET_BIT(USART1->CR1,USART_CR1_RE|USART_CR1_TE|USART_CR1_RXNEIE|USART_CR1_UE);
Dma::config(DMA1_Channel2,(unsigned long)&USART1->TDR,(unsigned long)g_o_buf_0);
}
extern "C"{
void DMA1_Channel2_3_IRQHandler(void){
while(CHK_BIT(USART1->ISR,USART_ISR_TC));
SET_BIT(DMA1->IFCR,DMA_IFCR_CGIF2);
CLR_BIT(DMA1_Channel2->CCR,DMA_CCR_EN);
CLR_BIT(USART1->CR3,USART_CR3_DMAT);
}
}
void Dma::config(
DMA_Channel_TypeDef *dma_chx,
unsigned long periphera_address,
unsigned long memory_address
){
SET_BIT(RCC->AHBENR,RCC_AHBENR_DMAEN);
Timer::delay_stuck(1000);
dma_chx->CPAR=periphera_address; //DMA1 ÍâÉèµØÖ·
dma_chx->CMAR=memory_address; //DMA1,´æ´¢Æ÷µØÖ·
SET_REG(dma_chx->CCR,DMA_CCR_PL_0|DMA_CCR_MINC|DMA_CCR_DIR|DMA_CCR_TCIE);
SET_BIT(DMA1->IFCR,DMA_IFCR_CGIF2);
NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
}
void Dma::enable(DMA_Channel_TypeDef *dma_chx,unsigned short size){
dma_chx->CNDTR=size; //DMA1,´«ÊäÊý¾ÝÁ¿
SET_REG(USART1->CR3,USART_CR3_DMAT);
SET_BIT(dma_chx->CCR,DMA_CCR_EN);
}
评分
查看全部评分