Thông báo

Collapse
No announcement yet.

Cho em hỏi về PS2 của STM32 RDT6

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Cho em hỏi về PS2 của STM32 RDT6

    Bác nào giúp em với, sắp tới ngày nộp đồ án mà chưa chạy. Em cảm ơn nhiều lắm. Hay nếu ai biết chỗ nào nhận sửa đc mạch của em thì bảo em với ạ.

    Mạch em làm về quẹt thẻ giao tiếp với STM32 qua PS2 rồi hiện mã thẻ lên màn hình qua UART.

    Em đặt A2 làm ngắt ngoài, A1 là DATA. Khi quẹt thì cũng đã nhảy vào hàm ngắt nhưng chân DATA tín hiệu chỉ là 1 suốt nên hiện kết quả sai (toàn 1 chữ giống nhau).

    Sau đây là code của em.
    //Hàm convert chỉ là lấy mã ra số thôi ạ.
    //Main.C
    #include <stm32f10x.h>
    #include "glcd.h"
    #include <string.h>
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;

    uint8_t i,k,index=0,j=65;

    void string_senduart(char *string)
    { k=strlen(string);
    for(i=0;i<k;i++)
    {
    USART_SendData( USART1, (uint8_t)string[i]);
    while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));
    }
    }
    #define data GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)
    void Delay(__IO uint32_t num)
    {
    __IO uint32_t index = 0;
    for(index = (720000 * num); index != 0; index--)
    {
    }
    }
    //B1:
    void RCC_Configuration(void)
    { /* Enable GPIOA and GPIOB and AFIO and USART clocks */
    //NOTE: usart1 thi la APB2, con usart khac la APB1
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_AP B2Periph_GPIOC|RCC_APB2Periph_GPIOA| RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE);
    }
    //B2:
    void configure_usart()
    {
    //configure PA.9 as output_push pull
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    /* Configure PA10 for USART Rx as input floating */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* USARTx configured as follow:
    - BaudRate = 115200 baud
    - Word Length = 8 Bits
    - One Stop Bit
    - No parity
    - Hardware flow control disabled (RTS and CTS signals)
    - Receive and transmit enabled
    */
    USART_InitStructure.USART_BaudRate = 115200;
    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 configuration */
    USART_Init(USART1, &USART_InitStructure);
    USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
    USART_Cmd(USART1, ENABLE);
    }
    void configure_EXTI()
    {
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    //configure PA.2
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    /* Connect EXTI0 Line to PA.2 pin */
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource2);
    /* Configure EXTI0 line */
    EXTI_InitStructure.EXTI_Line = EXTI_Line2;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
    /* Enable the EXTI0 Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty =15;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    }
    int main()
    {
    //*
    RCC_Configuration();
    configure_usart();
    configure_EXTI();

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7 |GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    /* Configure PB.8, PB.9, PB.10, PB11, PB12, PB.13, PB14 and PB.15 as output push-pull */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    // GPIO_WriteBit(GPIOB, GPIO_Pin_0, (BitAction)(1));

    while(1)
    {
    Delay(1);
    string_senduart("\nChuong trinh doc the: \n");
    GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8)));
    Delay(20);
    };
    }
    void EXTI2_IRQHandler(void)
    {
    //GLCD_displayStringLn(Line2, "PROCESSING...");
    //string_senduart("\nPROCESSING...");
    //GLCD_displayChar(4,6,65);
    bit_count ++; // dem bit PS2
    if(bit_count==1)
    {
    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)) m_DataPS2=0; //Text START
    }
    else if(bit_count>1 && bit_count<10)
    {
    m_DataPS2>>=1;
    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1))
    {
    m_DataPS2 |=0x80;
    }
    }
    else if(bit_count>10) //bit STOP
    {
    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1))
    {
    if((so_byte==126)|(so_byte==0))
    {
    so_byte=0;
    id=0;
    string_senduart("\nSo the cua ban: ");
    }
    if ((so_byte!=0)&&(so_byte%3==0))
    {
    id++;
    m[id] = Convert_keyboard(m_DataPS2);
    if ((id<29)&&(id!=0))
    {
    USART_SendData(USART1,m[id]) ;
    }
    if (id==28)
    {
    delay(1000);
    }
    }
    }
    bit_count=0;
    m_DataPS2=0;
    so_byte++;
    }
    }

  • #2
    ai giúp với.

    Comment


    • #3
      lên..............................

      Comment


      • #4
        ... không ai biết hả, chán vậy

        Comment


        • #5
          bạn cho sơ đồ nguyên lý lên đi, và nêu qua xem có giúp được gì không nào?chứ mỗi file main.c thì hơi khó.up cho cả file lên đi bạn!
          |

          Comment

          Về tác giả

          Collapse

          norimo Tìm hiểu thêm về norimo

          Bài viết mới nhất

          Collapse

          Đang tải...
          X