原子哥的min开发板的stm32rct6的串口连接外设的

2019-07-21 06:48发布

用32的串口发送指令给GY-MCU90615 模块,然后通过串口回传温度,GY-MCU90615 模块的主要用法如下,检查了很多遍,但本应该回传的帧的头格式数据都收不到,下面时我的主函数,求大神帮我看看,卡了好长时间了io口的配置是看例程的,前辈们帮忙看看,没准聪明的你们一眼就看出了问题
)I@7~5U6Y(16]~T7OS~IG38.png 9)3}7V$%@$_]QC{RH2Z_B3K.png



#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
u8* rebuff[9];
void USART1_IRQHandler(void)
{
        int i;
        if(USART_GetITStatus(USART1,USART_IT_RXNE))//如果收到数据
                for(i=0;i<9;i++)
                *rebuff=USART_ReceiveData( USART1);//读数据
//          USART_FLAG_RXNE=0;//清除标志位
}
void send_commend(unsigned char com)//发送字节命令
{
        if(USART_GetFlagStatus( USART1, USART_FLAG_RXNE)==0)
        {
                USART_SendData(USART1, com);
        }
}
int main(void)
{        
         u8 times=0;
        delay_init();                     //延时函数初始化        
        NVIC_Configuration();// 设置中断优先级分组
        uart_init(9600);         //串口初始化为9600
        LED_Init();                           //初始化与LED连接的硬件接口
  LCD_Init();USART_SendData        
        POINT_COLOR=RED;
         (USART1, 0xA5);
                USART_SendData(USART1, 0xAE);
                USART_SendData(USART1, 0x53);//配置波特率为9600;
        while(1)
        {
                times++;
                USART_SendData(USART1, 0xA5);
                USART_SendData(USART1, 0x45);
                USART_SendData(USART1, 0xEA);
                LCD_ShowString(30,40,200,24,24,rebuff[0]);
                if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
                        delay_ms(10);           
        }         
}



/USART 3&#245;ê&#188;&#187;ˉéè&#214;&#195;

         USART_InitStructure.USART_BaudRate = bound;//
         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(USART1, &USART_InitStructure); //
    USART_ITConfig(USART1, USART_IT_RXNE  , ENABLE);//开启中断
    USART_Cmd(USART1, ENABLE);                    //ê1&#196;ü′&#174;&#191;ú



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-21 08:01
直接通过串口连接电脑,看看能否收到数据?先确认模块是否工作正常!
执念之年
2楼-- · 2019-07-21 13:05
我用的是mini串口1,也就是与ch340g相连的,而且我用的是usb下载,要用到串口1,所以无法连接电脑
wangmingwei093
3楼-- · 2019-07-21 14:46
 精彩回答 2  元偷偷看……
执念之年
4楼-- · 2019-07-21 18:42
wangmingwei093 发表于 2018-12-14 09:58
原子哥是让你直接用电脑连接温度模块吧?让你直接从PC串口发送指令看看有没有数据返回,是这个意思吧?

我用了一个usb转ttl电平的模块把传感器直接连电脑是正确的,可以返回温度,发送读温度指令是,感觉是我的程序出了问题
执念之年
5楼-- · 2019-07-21 19:53
正点原子 发表于 2018-12-14 02:06
直接通过串口连接电脑,看看能否收到数据?先确认模块是否工作正常!

用usb转ttl电平直接连电脑是正确的,我在32上的连接是,把mini板的pA9A10的和rxd与txd的跳线帽拔掉,用多邦线把模块的rxd连接32的txd,感觉是程序有问题
执念之年
6楼-- · 2019-07-21 19:59
改成这样后,感觉程序一直停留在发送字节命令中,因为不接上模块灯是闪的,接上模块灯就不闪了,复位也没用,但还是不知道问题在哪儿除零问题

void USART1_IRQHandler(void)
{

       
        if(USART_GetITStatus(USART1,USART_IT_RXNE))//è&#231;1&#251;ê&#213;μ&#189;êy&#190;Y
               
                *rebuff[i]=USART_ReceiveData( USART1);//读数据
       
    i++;
        if(i==8)
        {
                i=0;
                sign=1;//一帧数据接收完毕标志
        }
}
void send_commend(unsigned char com)//发送一个字节命令
{
                USART_SendData(USART1, com);
//while(!USART_SR_TC );
        //μè′y·¢&#203;ííê3é
//        USART_SR_TC=0;
       
}
int main(void)
{       
         u8 times=0;
         sign=0;
        delay_init();                     //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ       
        NVIC_Configuration();// éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é
        uart_init(115200);         //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a115200
        LED_Init();                           //3&#245;ê&#188;&#187;ˉó&#235;LEDá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
  LCD_Init();
        POINT_COLOR=RED;
         LCD_Clear(GREEN);
                USART_SendData(USART1, 0xA5);
                USART_SendData(USART1, 0x45);
                USART_SendData(USART1, 0xEA);
       
        while(1)
        {
               
               
                times++;
                if(sign)
                {
                LCD_ShowString(30,40,200,24,24,rebuff[0]+'0');
                         LED1=~LED1;
                }
                if(times%30==0)LED0=!LED0;//提示系统正在运行
                        delay_ms(10);
                               
        }         
}

一周热门 更多>