OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2318|回复: 8

求助

[复制链接]

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2019-3-10
在线时间
10 小时
发表于 2019-4-20 13:43:30 | 显示全部楼层 |阅读模式
5金钱
使用迪文屏与stm32f103进行通信,迪文屏与PC通信,点击发送的指令串口助手接收正常。当使用STM32与屏使用串口1连接时,屏能接收到温湿度数据,但点击屏发送的指令STM32接收不到,使用串口助手模拟迪文屏发送的指令发送的单片机就能接收,请大佬指点问题所在。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-4-20 16:39:48 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-4-21 01:35:41 | 显示全部楼层
监控下串口数据,另外,看下是不是串口电平不匹配
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2019-3-10
在线时间
10 小时
 楼主| 发表于 2019-4-21 11:02:10 | 显示全部楼层
正点原子 发表于 2019-4-21 01:35
监控下串口数据,另外,看下是不是串口电平不匹配

串口数据没问题,串口电平我是单独的5V/1A供电,只使用了屏的DIN DOUT GND与单片机通信
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-4-22 02:00:27 | 显示全部楼层
userlrcxh 发表于 2019-4-21 11:02
串口数据没问题,串口电平我是单独的5V/1A供电,只使用了屏的DIN DOUT GND与单片机通信

没问题就可以通行了,那为何不行?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

359

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1604
金钱
1604
注册时间
2017-12-18
在线时间
173 小时
发表于 2019-4-22 09:06:55 | 显示全部楼层
你用屏给STM32发了什么指令?
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2019-3-10
在线时间
10 小时
 楼主| 发表于 2019-4-22 10:50:24 | 显示全部楼层
高山仰止 发表于 2019-4-22 09:06
你用屏给STM32发了什么指令?

我测试了一下,接收迪文屏发送的指令时程序进不去接收中断,串口模拟相同指令的时候就可以进入,是不是我的接收程序出问题了?我的串口程序是这个:
void DEBUG_USART_Init(void)
        {
  //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
               
          /* 使能USART时钟 */
  DEBUG_USARTx_ClockCmd(DEBUG_USARTx_CLK,ENABLE);
//        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //使能USART1,GPIOA时钟
          /* 使能USART功能GPIO时钟 */
        DEBUG_USARTx_GPIO_ClockCmd(DEBUG_USARTx_TX_CLK | DEBUG_USARTx_RX_CLK | RCC_APB2Periph_AFIO,ENABLE);
  
        //USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = DEBUG_USARTx_TX_PIN; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
  GPIO_Init(DEBUG_USARTx_TX_PORT, &GPIO_InitStructure);//初始化GPIOA.9
   
  //USART1_RX          GPIOA.10初始化
  GPIO_InitStructure.GPIO_Pin = DEBUG_USARTx_RX_PIN;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(DEBUG_USARTx_RX_PORT, &GPIO_InitStructure);//初始化GPIOA.10  

  //Usart1 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器
  
   //USART 初始化设置
        USART_InitStructure.USART_BaudRate = DEBUG_USARTx_BAUDRATE;//串口波特率
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
        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); //初始化串口1
  USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);//开启串口接受中断
  USART_Cmd(DEBUG_USARTx, ENABLE);                    //使能串口1

}
        //USART_RX_STA 接收状态标记
static int i=0;
void USART1_IRQHandler(void)                        //串口1中断服务程序
        {
        char Res;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
                {
                Res =USART_ReceiveData(USART1);        //读取接收到的数据
                if(USART_RX_STA==0)//接收标志位
                        {
                                        USART_RX_BUF=Res ;//数组接收存储指令
                                        i++;
                        if(i>=9)
                                {         
                                        i=0;
                                        if(USART_RX_BUF[0]==0x5a&&USART_RX_BUF[1]==0xa5)               
                                        {                                               
                                                        USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, DISABLE);//关闭接收中断
                                                        USART_RX_STA=1;        //标志位置1
                                        }
                                        else
                                                        USART_RX_STA=0;
                                }       
                                USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);//开启接收中断
     }
         }
               
}
回复

使用道具 举报

6

主题

359

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1604
金钱
1604
注册时间
2017-12-18
在线时间
173 小时
发表于 2019-4-22 11:25:43 | 显示全部楼层
userlrcxh 发表于 2019-4-22 10:50
我测试了一下,接收迪文屏发送的指令时程序进不去接收中断,串口模拟相同指令的时候就可以进入,是不是我 ...

接收中断写的有问题,前面得是5A A5,才能接收后面的,而且你最好判断一下接收到的字节数
回复

使用道具 举报

4

主题

98

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3900
金钱
3900
注册时间
2018-5-25
在线时间
902 小时
发表于 2019-4-23 10:26:53 | 显示全部楼层
直接上示波器,查看接收引脚有没有数据;
确定没有问题,查你的程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 15:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表