初级会员

- 积分
- 104
- 金钱
- 104
- 注册时间
- 2014-5-8
- 在线时间
- 0 小时
|

楼主 |
发表于 2014-5-13 10:20:28
|
显示全部楼层
原子哥,这确实是个问题,我怀疑是不是延时的原因?我改成一个周期采集32个点,分别用查询法和DMA进行发送至串口调试助手,结果在串口调试助手里均不能得到32个周期点。
1、DAM不加延时
while(1)
{
temp=adcx*100*(3.3/4096);
SendBuff[0]=temp/100+'0';
SendBuff[1]=46;
SendBuff[2]=temp/10%10+'0';
SendBuff[3]=temp%10+'0';
SendBuff[4]=32;
LED0=1;
USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //使能串口1的DMA发送
MYDMA_Enable(DMA1_Channel4);
if(DMA_GetFlagStatus(DMA2_FLAG_TC4)!=RESET) //判断通道4传输完成
{
DMA_ClearFlag(DMA2_FLAG_TC4);//清除通道4传输完成标志
break;
}
//delay_us(1500);
}
2、DMA加延时1.5ms
while(1)
{
temp=adcx*100*(3.3/4096);
SendBuff[0]=temp/100+'0';
SendBuff[1]=46;
SendBuff[2]=temp/10%10+'0';
SendBuff[3]=temp%10+'0';
SendBuff[4]=32;
LED0=1;
USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //使能串口1的DMA发送
MYDMA_Enable(DMA1_Channel4);
if(DMA_GetFlagStatus(DMA2_FLAG_TC4)!=RESET) //判断通道4传输完成
{
DMA_ClearFlag(DMA2_FLAG_TC4);//清除通道4传输完成标志
break;
}
delay_us(1500);
}
得到一周期也只有24个数据左右;
3,用查询的方法发送
u16 adcx;
u8 SendBuff[6];
void Uart1_PutChar(u8 ch)
{
USART_SendData(USART1, (u8) ch+'0');
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
void Uart1_PutChar1(u8 ch)
{
USART_SendData(USART1, (u8) ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
int main(void)
{
u8 ah,al1,al2= 0;
u16 temp;
LED_Init() ;
delay_init(); //延时函数初始化
uart_init(38400);
Adc_Init(); //ADC初始化
Timer3_Configuration();
while(1)
{
temp=adcx*100*(3.3/4096);
ah=temp/100;
Uart1_PutChar(ah);
Uart1_PutChar1(46);
al1=temp/10%10;
Uart1_PutChar(al1);
al2=temp%10;
Uart1_PutChar(al2);
Uart1_PutChar1(32);
LED0=1;
}
}
得到的数据也只有27个左右。
附加信息:定时器定时1/(28*32)=1116us,串口波特率设为38400bps;
请问原子哥,问题出现在哪里?到底怎样才能在串口调试助手里显示32个数据。谢谢您!
|
|