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

          • nguyendinhvan
            Trả lời cho Vấn đề về tốc độ quay
            bởi nguyendinhvan
            Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
            hôm nay, 19:50
          • Andrea14
            Vấn đề về tốc độ quay
            bởi Andrea14
            Chào mọi người,

            Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
            12-12-2025, 12:42
          • bqviet
            Trả lời cho Đấu tắt điện cho máy tính bảng
            bởi bqviet
            Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
            06-12-2025, 17:17
          • nguyendinhvan
            Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
            bởi nguyendinhvan
            Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
            05-12-2025, 19:59
          Đang tải...
          X