初级会员

- 积分
- 97
- 金钱
- 97
- 注册时间
- 2014-10-19
- 在线时间
- 12 小时
|
1金钱
在主程1秒中的定时任务中发送串口数据,总是发不出去,查了DMA_ISR中的标志发现TEIF4和GIF4都为1,不知道是哪里出了问题,请高手指点一下,谢谢
void uart1_init(u32 pclk2)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(9600*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB2ENR|=1<<14; //使能串口1时钟
GPIOA->CRH&=0XFFFFF00F;
GPIOA->CRH|=0X000008B0;//IO状态设置
RCC->APB2RSTR|=1<<14; //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位
//波特率设置
USART1->BRR=mantissa; // 波特率设置
USART1->CR1|=0X200C; //1位停止,无校验位.
i
//#ifdef EN_USART1_RX //如果使能了接收
//使能接收中断
USART1->CR1|=1<<8; //tc中断使能
USART1->CR1|=1<<5; //接收缓冲区非空中断使能
// USART1->CR1&=~(1<<6); //TCIE为0
//USART1->CR1|=1<<7; //TXEIE为1
MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级
/*以下两行代码的目的是为了清除发送中断使能后USART1的pending*/
// NVIC_Pending_Clr(USART1_IRQChannel);
// USART1->SR &= (~(1<<6));
//#endif
}
void HardWare_Init()
{
//uart_init(72,9600); //串口1初始
uart1_init(72);//串口1
MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)Uart[0].TXBUF,UARTTXDBUFFERLEN);//DMA1通道4,外设为串口1,存储器为SendBuff,长度5200.
// uart2_init(72);//串口2
// MYDMA_Config(DMA1_Channel7,(u32)&USART2->DR,(u32)Uart[1].TXBUF,UARTTXDBUFFERLEN);//DMA1通道4,外设为串口1,存储器为SendBuff,长度5200.
// uart3_init(72);//串口3
// MYDMA_Config(DMA1_Channel2,(u32)&USART3->DR,(u32)Uart[2].TXBUF,UARTTXDBUFFERLEN);//DMA1通道4,外设为串口1,存储器为SendBuff,长度5200.
}
void Uart0Debug()
{
memcpy(&Uart[0].TXBUF[0],&SoftTimer[0],7);
Uart[0].Txdlen=7;
Uart[0].Txdpoint=0;
USART1->CR3=1<<7;//使能串口1的DMA发送
DMA1_MEM_LEN = Uart[0].Txdlen;
MYDMA_Enable(DMA1_Channel4);//开始一次DMA传输!
}
|
|