初中生
最后登录1970-1-1
在线时间 小时
注册时间2020-4-19
|
打算整一个激光测模块测出数据后显示到lcd上的程序,
串口助手发送字符串到lcd上已经能成功显示了,但测距模块传输到lcd时却一直没有显示
已经搞了几周了,用了很多办法依旧不能成功,于是来求助
一、硬件
板子:f103霸道
测距模块:
波特率19200 数据位8 停止位1 无校验
接收到一个特定字符后,返回这个字符,然后进行测距操作后返回测到的数值,字符串类型,以换行符结尾
二、程序
串口中断程序:
void DEBUG_USART_IRQHandler(void)
{
uint8_t num=0;
/* 接收的数据长度 */
uint32_t buff_length;
/* 使用串口DMA */
if(USART_GetITStatus(DEBUG_USARTx,USART_IT_IDLE)!=RESET)
{
/* 关闭DMA ,防止干扰 */
DMA_Cmd(USART_RX_DMA_CHANNEL, DISABLE); /* 暂时关闭dma,数据尚未处理 */
buff_length = USART_RX_BUFF_SIZE - DMA_GetCurrDataCounter(USART_RX_DMA_CHANNEL);
/* 清DMA标志位 */
DMA_ClearFlag( DMA1_FLAG_TC5 );
/* 重新赋值计数值,必须大于等于最大可能接收到的数据帧数目 */
USART_RX_DMA_CHANNEL->CNDTR = USART_RX_BUFF_SIZE;
/* 此处应该在处理完数据再打开,如在 DataPack_Process() 打开*/
DMA_Cmd(USART_RX_DMA_CHANNEL, ENABLE);
num++;
// 清除空闲中断标志位
USART_ReceiveData( DEBUG_USARTx );
}
while(num==1)
{
int i;
//把dma接收到的数据逐位写入新的数组,
for(i=0;i<buff_length;i++)
{
RX_date1=Usart_Rx_Buf;
}
//向串口输出数组内字符串
num=0;
}
主函数
int main ( void )
{
ILI9341_Init (); //LCD 初始化
USART_Config();
EXTI_Key_Config(); //按键中断,用来使用按键向串口发送字符使测距模块开始测距
ILI9341_GramScan ( 6 );
while ( 1 )
{
LCD_Test();
}
}
lcd调用数组:
void LCD_Test(void)
{
LCD_SetFont(&Font16x24);
LCD_SetTextColor(GREEN);
LCD_ClearLine(LINE(4));
ILI9341_DispStringLine_EN ( LINE(4), RX_date1 );
Delay(0xFFFFF); //延时
}
|
|