原子哥的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条回答
执念之年
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);
                               
        }         
}

一周热门 更多>