请大佬帮忙解决 感觉逻辑没有问题就是不成功

2019-07-21 01:41发布


想要实现串口助手发送数据通过RS485来传输数据控制led的亮灭
同时按键按下的数值能够通过RS485来显示在串口助手上

main.c


/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "stm32f10x_conf.h"
#include <stdio.h>
#include "string.h"

#include "gpio.h"
#include "delay.h"
#include "USART.h"

#define S1_DOWN GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) == 1
#define S1_UP GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) == 0
#define LED1_ON GPIO_ResetBits(GPIOC,GPIO_Pin_13)
#define LED1_OFF GPIO_SetBits(GPIOC,GPIO_Pin_13)
#define LED2_ON GPIO_ResetBits(GPIOC,GPIO_Pin_14)
#define LED2_OFF GPIO_SetBits(GPIOC,GPIO_Pin_14)
#define LED3_ON GPIO_ResetBits(GPIOC,GPIO_Pin_15)
#define LED3_OFF GPIO_SetBits(GPIOC,GPIO_Pin_15)
#define LED4_ON GPIO_ResetBits(GPIOA,GPIO_Pin_4)
#define LED4_OFF GPIO_SetBits(GPIOA,GPIO_Pin_4)
#define LED5_ON GPIO_ResetBits(GPIOA,GPIO_Pin_5)
#define LED5_OFF GPIO_SetBits(GPIOA,GPIO_Pin_5)
#define LED6_ON GPIO_ResetBits(GPIOA,GPIO_Pin_6)
#define LED6_OFF GPIO_SetBits(GPIOA,GPIO_Pin_6)
#define LED7_ON GPIO_ResetBits(GPIOC,GPIO_Pin_6)
#define LED7_OFF GPIO_SetBits(GPIOC,GPIO_Pin_6)
#define LED8_ON GPIO_ResetBits(GPIOC,GPIO_Pin_7)
#define LED8_OFF GPIO_SetBits(GPIOC,GPIO_Pin_7)
//u8 ge;
//u8 shi;

#define USART_REC_LEN                          200          //&#182;¨ò&#229;×&#238;′ó&#189;óê&#213;×&#214;&#189;úêy 200
#define USART_REC_LEN2                          200          //&#182;¨ò&#229;×&#238;′ó&#189;óê&#213;×&#214;&#189;úêy 200
#define EN_USART1_RX                         1                //ê1&#196;ü£¨1£&#169;/&#189;&#251;&#214;1£¨0£&#169;′&#174;&#191;ú1&#189;óê&#213;
                 
u8  USART_RX_BUF[USART_REC_LEN]; //&#189;óê&#213;&#187;o3&#229;,×&#238;′óUSART_REC_LEN&#184;&#246;×&#214;&#189;ú.&#196;&#169;×&#214;&#189;ú&#206;a&#187;&#187;DD·&#251;
u16 USART_RX_STA;   //&#189;óê&#213;×′ì&#172;±ê&#188;&#199;       

u8  USART_RX_BUF2[USART_REC_LEN2]; //&#189;óê&#213;&#187;o3&#229;,×&#238;′óUSART_REC_LEN&#184;&#246;×&#214;&#189;ú.&#196;&#169;×&#214;&#189;ú&#206;a&#187;&#187;DD·&#251;
u16 USART_RX_STA2;                         //&#189;óê&#213;×′ì&#172;±ê&#188;&#199;       
#define RS485CTR_CLR           GPIO_ResetBits(GPIOE, GPIO_Pin_15)   //CTR&#214;&#195;μí0&#189;óê&#213;
#define RS485CTR_SET           GPIO_SetBits(GPIOE, GPIO_Pin_15)     //CTR&#214;&#195;&#184;&#223;1·¢&#203;í
void HEXtoLcd(u8 s)
{
        u8 temp;
        int i;
        temp=s;
        for(i=1; i<=8; i++)
        {
                if (temp%2 ==0 )
                {
                        switch(i)  
                        {
                                case 1: LED1_ON; break;
                                case 2: LED2_ON; break;               
                                case 3: LED3_ON; break;
                                case 4: LED4_ON; break;               
                                case 5: LED5_ON; break;
                                case 6: LED6_ON; break;               
                                case 7: LED7_ON; break;
                                case 8: LED8_ON; break;               
                        }
                }
                else
                {
                        switch(i)  
                        {
                                case 1: LED1_OFF; break;
                                case 2: LED2_OFF; break;               
                                case 3: LED3_OFF; break;
                                case 4: LED4_OFF; break;               
                                case 5: LED5_OFF; break;
                                case 6: LED6_OFF; break;               
                                case 7: LED7_OFF; break;
                                case 8: LED8_OFF; break;               
                        }                       
                }
                temp = temp / 2;
        }
}



       







int main(void)
{
        //unsigned char i;
                GPIO_Config();
                GPIO_Key_Config();
                USART1_Config();
                USART3_Config();
                RS485CTR_CLR;//CTR&#214;&#195;μí0&#189;óê&#213;
  while (1)
        {
//for(i=0;i<100;i++)
//                {
//                        RS485CTR_SET;                                                                                                                //·¢&#203;í×′ì&#172;£&#172;CTR&#206;a&#184;&#223;
//                        USART_SendData(USART3,255-i);                         //&#189;&#171;&#188;ü&#214;μ·¢&#203;íμ&#189;′ó&#187;ú
//                  while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET); //μè′y·¢&#203;ííê3é               
//                        delay_ms(200);       
                unsigned char cnt=0;
                if (S1_DOWN)
    {
                        delayms(10);
                        if (S1_DOWN)
                        {
                                while(S1_DOWN)
                                {
                                        delayms(10);
                                }               
                                RS485CTR_SET;
                                cnt++;
               
                                USART_SendData(USART3,cnt);
                                while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);//μè′y·¢&#203;ííê3é       
                               
                                RS485CTR_CLR;
                                delayms(10);
                        }
                //HEXtoLcd(USART_RX_BUF[USART_RX_STA-1]);
                }
                HEXtoLcd(USART_RX_BUF[USART_RX_STA-1]);               
//                        shi=cnt/10+0x30;
//                        ge=cnt%10+0x30;
//                 //        Lcd_Clear(GRAY0);
//            Gui_DrawFont_GBK16(31,23,RED,GRAY0,&ge);
//           Gui_DrawFont_GBK16(1,23,RED,GRAY0,&shi);
//       
        }
}


串口3的中断函数
void USART3_IRQHandler(void)                        //′&#174;&#191;ú3&#214;D&#182;&#207;·t&#206;&#241;3ìDò
        {
        u8 Res;

        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //&#189;óê&#213;&#214;D&#182;&#207;(&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y±&#216;D&#235;ê&#199;0x0d 0x0a&#189;á&#206;2)
                {
                       
                Res =USART_ReceiveData(USART3);        //&#182;áè&#161;&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y
                if((USART_RX_STA&0x8000)==0)//&#189;óê&#213;&#206;′íê3é
                        {
                        if(USART_RX_STA&0x4000)//&#189;óê&#213;μ&#189;á&#203;0x0d
                                {
                                if(Res!=0x0a)USART_RX_STA=0;//&#189;óê&#213;′í&#206;ó,&#214;&#216;D&#194;&#191;aê&#188;
                                else USART_RX_STA|=0x8000;        //&#189;óê&#213;íê3éá&#203;
                                }
                        else //&#187;1&#195;&#187;ê&#213;μ&#189;0X0D
                                {       
                                if(Res==0x0d)USART_RX_STA|=0x4000;
                                else
                                        {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))
                                                USART_RX_STA=0;//&#189;óê&#213;êy&#190;Y′í&#206;ó,&#214;&#216;D&#194;&#191;aê&#188;&#189;óê&#213;          
                                        }                 
                                }
                        }                    
     }

}



数据初始化函数
#include "stm32f10x.h"
#include "USART.h"



void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,uint16_t Len){
        uint16_t i;
        for(i=0; i<Len; i++){
                USART_SendData(USARTx, Data[i]); //·¢&#203;íò&#187;&#184;&#246;×&#214;&#189;úêy&#190;Y
                while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);//&#197;D&#182;&#207;ê&#199;·&#241;·¢&#203;ííê±&#207;£&#172;RESET&#182;¨ò&#229;&#206;a0
        }
}



void USART1_Config(void){


GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);  //&#191;a&#198;&#244;A&#182;&#203;&#191;úê&#188;ê±&#214;ó


//USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOA.9

  //USART1_RX          GPIOA.103&#245;ê&#188;&#187;ˉ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//&#184;&#161;&#191;&#213;ê&#228;è&#235;
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOA.10  



  //Usart1 NVIC &#197;&#228;&#214;&#195;
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                //×óó&#197;&#207;è&#188;&#182;1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);        //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷


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

        USART_InitStructure.USART_BaudRate = 9600;//′&#174;&#191;ú2¨ì&#216;&#194;ê
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×&#214;3¤&#206;a8&#206;&#187;êy&#190;Y&#184;&#241;ê&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò&#187;&#184;&#246;í£&#214;1&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;//&#206;T&#198;&#230;&#197;&#188;D£&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;Tó2&#188;têy&#190;Yá÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ê&#213;·¢&#196;£ê&#189;

  USART_Init(USART1, &USART_InitStructure); //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;′&#174;&#191;ú&#189;óê&#213;&#214;D&#182;&#207;
  USART_Cmd(USART1, ENABLE);                    //ê1&#196;ü′&#174;&#191;ú1
                USART_ClearFlag(USART1,USART_FLAG_TC);




}

void USART3_Config(void){


GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB1Periph_USART3,ENABLE);  //&#191;a&#198;&#244;A&#182;&#203;&#191;úê&#188;ê±&#214;ó ′&#174;&#191;ú3ê±&#214;ó

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                 //USART3 TX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
  GPIO_Init(GPIOB, &GPIO_InitStructure);                    //B&#182;&#203;&#191;ú

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;                 //USART3 RX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //&#184;′ó&#195;&#191;a&#194;&#169;ê&#228;è&#235;
  GPIO_Init(GPIOB, &GPIO_InitStructure);                         //B&#182;&#203;&#191;ú
       
  //Usart1 NVIC &#197;&#228;&#214;&#195;
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;0
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                //×óó&#197;&#207;è&#188;&#182;1
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);        //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷

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

        USART_InitStructure.USART_BaudRate = 9600;//′&#174;&#191;ú2¨ì&#216;&#194;ê
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×&#214;3¤&#206;a8&#206;&#187;êy&#190;Y&#184;&#241;ê&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò&#187;&#184;&#246;í£&#214;1&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;//&#206;T&#198;&#230;&#197;&#188;D£&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;Tó2&#188;têy&#190;Yá÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ê&#213;·¢&#196;£ê&#189;

        USART_Init(USART3, &USART_InitStructure);
        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;′&#174;&#191;ú&#189;óê&#213;&#214;D&#182;&#207;
        USART_Cmd(USART3, ENABLE);
        USART_ClearFlag(USART3,USART_FLAG_TC);
}



#include "stm32f10x.h"
#include "gpio.h"

void GPIO_Config(void){

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);  //&#191;a&#198;&#244;E&#182;&#203;&#191;úê&#188;ê±&#214;ó
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  //&#191;a&#198;&#244;A&#182;&#203;&#191;úê&#188;ê±&#214;ó





  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;                 //   PE15   //CS 485
        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
  GPIO_Init(GPIOE, &GPIO_InitStructure);                    //E&#182;&#203;&#191;ú



  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                 // TX  PA2
        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
  GPIO_Init(GPIOA, &GPIO_InitStructure);                    //A&#182;&#203;&#191;ú




GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                 // RX  PA3
        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //&#184;&#161;&#191;&#213;ê&#228;è&#235;
  GPIO_Init(GPIOA, &GPIO_InitStructure);                    //A&#182;&#203;&#191;ú




RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA, ENABLE);         //ledμ&#198;gpio3&#245;ê&#188;&#187;ˉ
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15|GPIO_Pin_6|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //í&#198;íìê&#228;3&#246;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_4;
  GPIO_Init(GPIOA, &GPIO_InitStructure);       





}

void GPIO_Key_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
                 GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOC,&GPIO_InitStructure);       
       
}









友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。