【STM32F0开发日志/评测/笔记】+互补PWM波的产生
STM32F030 PB14和PB15无法输出PWM求助
【STM32F030探索套件】序列之五 外部中断
【STM32F0开发日志---二】+ucosii.2.92移植在STM32F030
上传个STM32F0+5110+内部温度传感器的菜鸟实例
【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败
求一份STM32F051 I2C驱动LCD 12864的例程
STM32F0 M0 向结构体赋值进入HardFault异常
STM32F0 ADC-DMA方式采集2路数据时出现问题
STM32F030C8T6,TIM16定时慢很多问题?
越来越欢乐了.
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);
}
评分
查看全部评分
目前是用的DMA发送,串口中断接收.
会遇到DMA发送标记不清零的情况,是在DMA发送结束中断清零标记的,说明没有进入DMA发送结束中断.
最开始,在DMA的TCIE中断里面清除发送标志,结果偶尔会进入不了中断.
后面改为USART的TCIE来判断发送是否完成,这样就可以正常的检测发送结束了.
然后,由于接收数据时中断导致float失效,float数据全为#QNAN.相关操作失效,感觉就像没有发送一样.
看来必须把RX也改为DMA.
接收发送都正常.
但是 float死机的情况比之前接收用 串口中断,发送用DMA更加严重了.
是什么导致的float #QNAN?
DMA会占用数据总线.
难道要回到C程序,C++对于48MHz来说太奢侈了?