Thông báo

Collapse
No announcement yet.

cấu hình linh hoạt GPIO cho STM32 qua USB

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

  • cấu hình linh hoạt GPIO cho STM32 qua USB

    Mình xin được hỏi một chút.Mình có làm chương trình giao tiếp giữa STM32F103VET6 với labview. Mình thực hiện cấu hình gửi 5BYTE để cấu hình cho 38 chân của ARM những bit nào là 0 thì là chân ra, 1 thì là chân vào.Sau đó thực hiện cấp tín hiệu cho những chân được cấu hình là chân Ra( 5Byte dữ liệu) và thu tín hiệu từ các chân ARM được cấu hình là chân vào ( lưu vào 5Byte) để gửi lên máy tính qua USB.
    vấn đề của mình là thực hiện cấu hình cho chân GPIO 1 cách linh hoạt và không biết là những chân mà mình đã cấu hình là chân ra thì liệu lúc thu tín hiệu có thu được tín hiệu vào hay không và những chân đã cấu hình là chân vào thì lúc xuất dữ liệu ra các chân ARM thì nó có xuất tín hiệu ra không
    chương trình của mình thịc hiện vòng lặp và dịch phải byte 1 bít để chương trình gọn hơn
    Rất mong được sữ giúp đỡ của mọi người
    xin cảm ơn. Xin lỗi vì mình không biết làm thế nào để tải File.c của mình lên được, toàn bị báo lỗi

    GPIOMode_TypeDef MODE;

    #define GPIO_IC1 GPIOA

    #define GPIO_Pin_IC_0 GPIO_Pin_0
    #define GPIO_Pin_IC_1 GPIO_Pin_1
    #define GPIO_Pin_IC_2 GPIO_Pin_2
    #define GPIO_Pin_IC_3 GPIO_Pin_3
    #define GPIO_Pin_IC_4 GPIO_Pin_4
    #define GPIO_Pin_IC_5 GPIO_Pin_5
    #define GPIO_Pin_IC_6 GPIO_Pin_6
    #define GPIO_Pin_IC_7 GPIO_Pin_7

    #define GPIO_IC2 GPIOB

    #define GPIO_Pin_IC_8 GPIO_Pin_0
    #define GPIO_Pin_IC_9 GPIO_Pin_1
    #define GPIO_Pin_IC_10 GPIO_Pin_5
    #define GPIO_Pin_IC_11 GPIO_Pin_6
    #define GPIO_Pin_IC_12 GPIO_Pin_7
    #define GPIO_Pin_IC_13 GPIO_Pin_8
    #define GPIO_Pin_IC_14 GPIO_Pin_9

    #define GPIO_IC3 GPIOC
    #define GPIO_Pin_IC_15 GPIO_Pin_0
    #define GPIO_Pin_IC_16 GPIO_Pin_1
    #define GPIO_Pin_IC_17 GPIO_Pin_2
    #define GPIO_Pin_IC_18 GPIO_Pin_3
    #define GPIO_Pin_IC_19 GPIO_Pin_4
    #define GPIO_Pin_IC_20 GPIO_Pin_5
    #define GPIO_Pin_IC_21 GPIO_Pin_13
    #define GPIO_Pin_IC_22 GPIO_Pin_14
    #define GPIO_Pin_IC_23 GPIO_Pin_15

    #define GPIO_IC4 GPIOD
    #define GPIO_Pin_IC_24 GPIO_Pin_3
    #define GPIO_Pin_IC_25 GPIO_Pin_4
    #define GPIO_Pin_IC_26 GPIO_Pin_5
    #define GPIO_Pin_IC_27 GPIO_Pin_6
    #define GPIO_Pin_IC_28 GPIO_Pin_7

    #define GPIO_IC5 GPIOE
    #define GPIO_Pin_IC_29 GPIO_Pin_0
    #define GPIO_Pin_IC_30 GPIO_Pin_1
    #define GPIO_Pin_IC_31 GPIO_Pin_2
    #define GPIO_Pin_IC_32 GPIO_Pin_3
    #define GPIO_Pin_IC_33 GPIO_Pin_4
    #define GPIO_Pin_IC_34 GPIO_Pin_5
    #define GPIO_Pin_IC_35 GPIO_Pin_6
    #define GPIO_Pin_IC_36 GPIO_Pin_7
    #define GPIO_Pin_IC_37 GPIO_Pin_8



    void GPIO_SetState(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,GPIOMode_TypeDef GPIO_Mode);

    GPIOMode_TypeDef SET_GPIO_IC( int a);
    void SET_PORT_IC(void);
    void Data_receive_IC( void);
    void Data_send_IC( void);

    #include "IC_TEST.h"

    GPIO_TypeDef* GPIO_PORT_IC[5]= { GPIO_IC1 ,GPIO_IC2 ,GPIO_IC3 ,GPIO_IC4 ,GPIO_IC5 };

    uint16_t GPIO_PIN_IC[38]={ GPIO_Pin_IC_0,GPIO_Pin_IC_1,GPIO_Pin_IC_2,GPIO_Pin _IC_3,GPIO_Pin_IC_4,

    GPIO_Pin_IC_5,GPIO_Pin_IC_6,GPIO_Pin_IC_7,GPIO_Pin _IC_8,GPIO_Pin_IC_9,

    GPIO_Pin_IC_10,GPIO_Pin_IC_11,GPIO_Pin_IC_12,GPIO_ Pin_IC_13,GPIO_Pin_IC_14,

    GPIO_Pin_IC_15,GPIO_Pin_IC_16,GPIO_Pin_IC_17,GPIO_ Pin_IC_18,GPIO_Pin_IC_19,

    GPIO_Pin_IC_20,GPIO_Pin_IC_21,GPIO_Pin_IC_22,GPIO_ Pin_IC_23,GPIO_Pin_IC_24,

    GPIO_Pin_IC_25,GPIO_Pin_IC_26,GPIO_Pin_IC_27,GPIO_ Pin_IC_28,GPIO_Pin_IC_29,

    GPIO_Pin_IC_30,GPIO_Pin_IC_31,GPIO_Pin_IC_32,GPIO_ Pin_IC_33,GPIO_Pin_IC_34,

    GPIO_Pin_IC_35,GPIO_Pin_IC_36,GPIO_Pin_IC_37};
    uint8_t GPIO_buffer[5];
    uint8_t REdata_butffer[5];
    uint8_t SEdata_buffer[5];
    __IO extern uint8_t Receive_Buffer[HID_OUT_PACKET];
    int a;
    ///////////////////////////////////////////////////////////////////////////////
    // chuong trinh: cau hinh 1 chan GPIO
    // dau vao: GPIOx- GPIO PORT
    // GPIO_Pin
    // GPIOMode
    // dau ra: khong co
    //////////////////////////////////////////////////////////////////////////////
    void GPIO_SetState(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,GPIOMode_TypeDef GPIO_Mode)
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOx, &GPIO_InitStructure);
    }
    ///////////////////////////////////////////////////////////////////////////////
    // chuong trinh: Xac dinh trrang thai cho 1 chan GPIO
    // dau vao: du lieu dang int
    // dau ra : MODE- trang thai cua GPIO_IC
    //
    //////////////////////////////////////////////////////////////////////////////
    GPIOMode_TypeDef SET_GPIO_IC( int buff)
    {

    if ( buff==1)
    MODE = GPIO_Mode_IN_FLOATING;
    if ( buff==0)
    MODE = GPIO_Mode_Out_PP;

    }
    ///////////////////////////////////////////////////////////////////////////////
    // chuong trinh: Cau hinh tat ca 38 GPIO cho IC
    // dau vao: khong
    // dau ra : khong
    //
    //////////////////////////////////////////////////////////////////////////////
    void SET_PORT_IC(void)
    {
    int b;
    int m,n;
    uint8_t pin_count =0 ;
    GPIOMode_TypeDef mode_pin;
    for(m=1; m<=5; m ++)
    {
    GPIO_buffer[m]= Receive_Buffer[m];
    for( n=0;n<=7; n++)
    {
    b= GPIO_buffer[m]&0x01;// lay gia tri cua bit thap nhat bit 0
    mode_pin = SET_GPIO_IC(b);// xac dinh trang thai cua port_pin
    if ( pin_count <=7 ) GPIO_SetState(GPIO_IC1 , GPIO_PIN_IC[pin_count],mode_pin);
    else if ( 7 < pin_count <=14) GPIO_SetState(GPIO_IC2 , GPIO_PIN_IC[pin_count],mode_pin);
    else if ( 14 < pin_count <=23) GPIO_SetState(GPIO_IC3 , GPIO_PIN_IC[pin_count],mode_pin);
    else if ( 23 < pin_count <=28) GPIO_SetState(GPIO_IC4 , GPIO_PIN_IC[pin_count],mode_pin);
    else if ( 28 < pin_count <=37) GPIO_SetState(GPIO_IC5 , GPIO_PIN_IC[pin_count],mode_pin);
    pin_count ++;// dem so thu tu cua GPIO_PIN
    GPIO_buffer[m]>>=1;// dich phai 1 bit de lay gia tri bit tiep theo
    // cu nhu vay cho toi khi lay toi bit 7
    }
    // cu nhu vay cho toi khi lat duoc het cac gia tri cac bit trong 5 Byte
    // cau hinh cho du 38 chan, con thua 2 vong lap
    }
    }
    ///////////////////////////////////////////////////////////////////////////////
    // chuong trinh: nhan du lieu tu may tinh cap cho cac chan GPIO_IC
    // dau vao: khong
    // dau ra : khong
    //
    //////////////////////////////////////////////////////////////////////////////
    void Data_receive_IC( void)
    {
    int data;
    int m,n;
    uint8_t pin_count =0 ;
    for(m=1; m<=5; m ++)
    {
    REdata_butffer[m]= Receive_Buffer[m+5];
    for( n=0;n<=7; n++)
    {
    data= REdata_butffer[m]&0x01;// lay gia tri cua bit thap nhat bit 0
    if ( pin_count <=7 ) GPIO_WriteBit(GPIO_IC1 , GPIO_PIN_IC[pin_count],data);
    else if ( 7 < pin_count <=14) GPIO_WriteBit(GPIO_IC2 , GPIO_PIN_IC[pin_count],data);
    else if ( 14 < pin_count <=23) GPIO_WriteBit(GPIO_IC3 , GPIO_PIN_IC[pin_count],data);
    else if ( 23 < pin_count <=28) GPIO_WriteBit(GPIO_IC4 , GPIO_PIN_IC[pin_count],data);
    else if ( 28 < pin_count <=37) GPIO_WriteBit(GPIO_IC5 , GPIO_PIN_IC[pin_count],data);
    pin_count ++;// dem so thu tu cua GPIO_PIN_IC
    GPIO_buffer[m]>>=1;// dich phai 1 bit de lay gia tri bit tiep theo
    // cu nhu vay cho toi khi lay toi bit 7
    }
    // cu nhu vay cho toi khi lat duoc het cac gia tri cac bit trong 5 Byte
    // xuat du lieu du 38 chan, con thua 2 vong lap
    // chu y: nhung chan da cau hinh la chan vao thi khong biet co gi xuat ra duoc khong
    }
    }



    ///////////////////////////////////////////////////////////////////////////////
    // chuong trinh: nhan du lieu tu may tinh cap cho cac chan GPIO_IC
    // dau vao: khong
    // dau ra : khong
    //
    //////////////////////////////////////////////////////////////////////////////
    void Data_send_IC( void)
    {
    uint8_t data_in;
    int m,n;
    uint8_t pin_count =0 ;
    for(m=1; m<=5; m ++)
    {
    for( n=0;n<=7; n++)
    {

    if ( pin_count <=7 ) data_in= GPIO_ReadInputDataBit(GPIO_IC1 , GPIO_PIN_IC[pin_count]);
    else if ( 7 < pin_count <=14) data_in= GPIO_ReadInputDataBit(GPIO_IC2 , GPIO_PIN_IC[pin_count]);
    else if ( 14 < pin_count <=23) data_in= GPIO_ReadInputDataBit(GPIO_IC3 , GPIO_PIN_IC[pin_count]);
    else if ( 23 < pin_count <=28) data_in= GPIO_ReadInputDataBit(GPIO_IC4 , GPIO_PIN_IC[pin_count]);
    else if ( 28 < pin_count <=37) data_in= GPIO_ReadInputDataBit(GPIO_IC5 , GPIO_PIN_IC[pin_count]);
    SEdata_buffer[m]= SEdata_buffer[m]|| data_in;
    pin_count ++;// dem so thu tu cua GPIO_PIN_IC
    SEdata_buffer[m]<<=1;// dich trai 1 bit de lay gia tri bit tiep theo
    // cu nhu vay cho toi khi lay toi bit 7 tuc ghi day du gia tri cua 1 Byet
    }
    // cu nhu vay cho toi khi ghi duoc het cac gia tri cac bit vao trong 5 Byte
    // nhan du lieu du 38 chan, con thua 2 vong lap
    // chu y: nhung chan da cau hinh la chan ra thi khong biet co ghi vao duoc khong
    }
    }

Về tác giả

Collapse

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

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

Collapse

Đang tải...
X