各位大佬,帮忙看看,我需要从外部采集到电压信号,经过采集处理后,通过串口输出给上位机。现在是想用UART2去发送AD转换后的数据。只需要发送数据就可以了。下面是UART相关的配置:
void USART_Config(void)
{ GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;
DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(DEBUG_USARTx, &USART_InitStructure);
NVIC_Configuration();
USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
USART_Cmd(DEBUG_USARTx, ENABLE);
USART_ClearFlag(USART1, USART_FLAG_TC);
}
/// 重定向C库函数printf到USART2
int fputc(int ch, FILE *f)
{
DEBUG_USARTx->SR;
USART_SendData(DEBUG_USARTx, (uint8_t) ch);
while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE)== RESET);
return (ch);
}
int main ( void )
{
int i=0;
float ADval=0;
USART_Config ();
SysTick_Init ();
AdcInit();
Set_Adc(ADC_Channel_6);
LED_ON;
Delay_ms(10);
while(1)
{
for(i=0;i<3;i++)
{
LED_ON;
Delay_ms(5);
ADval=Get_ADValue();
// printf(&quot;OD:%.3f \r\n&quot;,ADval*3.3/4096);
printf(&quot;OD:%.3f \r\n&quot;,ADval);
}
for(i=0;i<3;i++)
{
LED_OFF;
Delay_ms(5);
ADval=Get_ADValue();
// printf(&quot;OD:%.3f \r\n&quot;,ADval*3.3/4096);
printf(&quot;OD:%.3f \r\n&quot;,ADval);
}
}
目前串口调试助手上可以正确显示,但是只有很短的一段时间,需要断电后,重新连接,再发送一部分。我希望是可以一直发送数据。也是刚接触这个编程不久,看了不少的帖子,还有例子,还是弄的不是很清楚,
没有传完整就停了,感觉像是设定的时间到了一样,不知道该从哪里去找 |