Electoday 4.0

ไมโครคอนโทรลเลอร์ => ARM Processors => Topic started by: tha on November 15, 2020, 09:29:02 am

Title: STM32F1 GPIO
Post by: tha on November 15, 2020, 09:29:02 am
9 General-purpose and alternate-function I/Os (GPIOs and AFIOs)
Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx
microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes.
Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx
microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes.
High-density devices are STM32F101xx and STM32F103xx microcontrollers where the
Flash memory density ranges between 256 and 512 Kbytes.
XL-density devices are STM32F101xx and STM32F103xx microcontrollers where the
Flash memory density ranges between 768 Kbytes and 1 Mbyte.
Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.
ส่วนนี้ใช้กับตระกูล STM32F10xxx ทั้งหมดเว้นแต่จะระบุไว้เป็นอย่างอื่น

9.1 GPIO functional description
แต่ละของ the general-purpose I/O ports มี two 32-bit configuration registers (GPIOx_CRL, GPIOx_CRH), two 32-bit data registers (GPIOx_IDR, GPIOx_ODR), a 32-bit set/reset register (GPIOx_BSRR), a 16-bit reset register (GPIOx_BRR) และ a 32-bit locking register (GPIOx_LCKR).

ขึ้นอยู่กับ the specific hardware characteristics ของแต่ละ I/O port แสดงรายการใน the datasheet, แต่ละ port bit ของ the General Purpose IO (GPIO) Ports, สามารถถูกกำหนดค่าเฉพาะรายได้โดย software

ในหลายโหมด :
• Input floating
• Input pull-up
• Input-pull-down
• Analog
• Output open-drain
• Output push-pull
• Alternate function push-pull (หน้าที่ทางเลือกอื่น push-pull )
• Alternate function open-drain

แต่ละ I/O port bit โปรแกรมได้อย่างอิสระ, อย่างไรก็ตาม the I/O port registers ต้องถูกเข้าถึงเป็น 32-bit words (half-word หรือ byte accesses ไม่ถูกยอมให้). ความมุ่งหมายของ the GPIOx_BSRR and GPIOx_BRR registers คือยอมให้ atomic read/modify เข้าถึงไปยัง the GPIO registers ใดๆ. ด้วยวิธีนี้, จะไม่มีความเสี่ยงที่ an IRQ เกิดขึ้นในระหว่าง the read และ the modify access.

Figure 13 แสดงโครงสร้างพื้นฐานของ an I/O Port bit.

(https://i.imgur.com/kVHZA0L.png)
1. VDD_FT เป็นศักยภาพเฉพาะสำหรับ I/Os ที่ทนต่อ 5 โวลต์และแตกต่างจาก VDD
Title: Re: STM32F1 GPIO
Post by: tha on November 15, 2020, 09:33:48 am
(https://i.imgur.com/Uaq5bXq.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 16, 2020, 08:26:49 am
9.1.1 General-purpose I/O (GPIO)
ระหว่างและเพิ่งหลังจากรีเซ็ต, the alternate functions จะไม่ทำงานและ the I/O ports ถูกกำหนดค่าใน Input Floating mode (CNFx[1:0]=01b, MODEx[1:0]=00b).

The JTAG pins อยู่ใน input PU/PD หลังจาก reset:
PA15: JTDI ใน PU
PA14: JTCK ใน PD
PA13: JTMS ใน PU
PB4: NJTRST ใน PU

เมื่อถูกกำหนดค่าเป็น output, ค่าที่เขียนไปยัง the Output Data register (GPIOx_ODR) ถูก output ไปบน the I/O pin. มันเป็นไปได้ที่จะใช้ the output driver ใน Push-Pull mode หรือ Open-Drain mode (มีเพียง the N-MOS ถูกทำให้ทำงานเมื่อ outputting 0).

The Input Data register (GPIOx_IDR) จับข้อมูลที่มีอยู่บน the I/O pin ทุกๆ APB2 clock cycle.

ทุก GPIO pins มี an internal weak pull-up และ weak pull-down ที่สามารถถูกทำให้ทำงานหรือไม่เมื่อกำหนดค่าเป็น input

9.1.2 Atomic bit set or reset
ไม่มีความจำเป็นต้องให้ the software ปิดการใช้งาน interrupts เมื่อโปรแกรม the GPIOx_ODR ที่ระดับบิต: มันเป็นไปได้ที่จะแก้ไขเพียงหนึ่งหรือหลายบิตใน a single atomic APB2 write access. นี้สำเร็จลงโดยการโปรแกรม ‘1’ the Bit Set/Reset Register (GPIOx_BSRR, หรือสำหรับ reset เพียงอย่างเดียว GPIOx_BRR) เพื่อเลือกบิตที่จะแก้ไข. บิตที่ไม่ได้เลือกจะไม่ถูกแก้ไข

9.1.3 External interrupt/wakeup lines
ทุก ports มี external interrupt capability. เพื่อใช้ external interrupt lines, the port ต้องถูกกำหนดค่าใน input mode. สำหรับข้อมูลที่มากขึ้นบน external interrupts, อ้างอิงถึง Section 10.2: External interrupt/event controller (EXTI) และ Section 10.2.3: Wakeup event management.

9.1.4 Alternate functions (AF)
มันมีความจำเป็นต้องโปรแกรม the Port Bit Configuration Register ก่อนการใช้ a default alternate function.
•    สำหรับ alternate function inputs, the port ต้องถูกกำหนดค่าใน Input mode (floating, pullup หรือ pull-down) และ the
      input pin ต้องถูกขับจากภายนอก

Note: นอกจากนี้ยังสามารถที่จะเลียนแบบ the AFI input pin โดย software โดยการโปรแกรม the GPIO controller. ในกรณีนี้, the port ควรถูกกำหนดค่าใน Alternate Function Output mode. และเห็นได้ชัดวา, the corresponding port ไม่ควรถูกขับจากภายนอกเนื่องจากมันจะถูกขับโดย the software โดยใช้ the GPIO controller.

•    สำหรับ alternate function outputs, the port ต้องถูกกำหนดค่าใน Alternate Function Output mode (Push-Pull หรือ
      Open-Drain)
.
•    สำหรับ bidirectional Alternate Functions, the port bit ต้องถูกกำหนดค่าใน Alternate Function Output mode (Push-
     Pull หรือ Open-Drain). ในกรณีนี้ the input driver ถูกกำหนดค่าใน input floating mode

ถ้า a port bit ถูกกำหนดค่าเป็น Alternate Function Output, จะเป็นการยกเลิกการเชื่อมต่อ the output register และไปต่อ the pin นั้นไปยัง the output signal ของ an on-chip peripheral.

ถ้า software กำหนดค่า a GPIO pin เป็น Alternate Function Output, แต่ peripheral ไม่ถูกทำให้ทำงาน, output ของมันจะไม่ถูกระบุ.

Title: Re: STM32F1 GPIO
Post by: tha on November 16, 2020, 09:45:36 am
9.1.5 Software remapping(เปลี่ยนขา) of I/O alternate functions
เพื่อทำจำนวนของ peripheral I/O functions ให้เหมาะสำหรับ device packages ที่แตกต่างกัน, มันสามารถที่จะเปลี่ยนขา(remap) บาง alternate functions ไปยังบางพินอื่นๆ. นี้ถูกทำให้สำเร็จลงโดย software, โดยการโปรแกรม the corresponding registers (อ้างอิงถึง AFIO registers. ในกรณีนี้, the alternate functions จะไม่ถูก mapped เข้ากับการกำหนดเดิม(original assignations)อีกต่อไป

9.1.6 GPIO locking mechanism
The locking mechanism ยอมให้ the IO configuration ถูกตรึง. เมื่อ the LOCK sequence ถูกนำไปใช้กับ a port bit, มันจะไม่สามารถแก้ไขค่าของ the port bit ได้อีกต่อไปจนกว่า the next reset.
Title: Re: STM32F1 GPIO
Post by: tha on November 16, 2020, 10:32:00 am
9.1.7 Input configuration
เมื่อ the I/O Port ถูกโปรแกรมเป็น Input:
•    The Output Buffer ถูกปิดการใช้งาน
•    The Schmitt Trigger Input ถูกทำให้ทำงาน
•    The weak pull-up และ pull-down resistors ถูกทำให้ทำงานหรือไม่ขึ้นอยู่กับ input configuration (pull-up, pull-down or
      floating):
•    The data ที่มีบน the I/O pin ถูกสุ่มเข้าไปยัง the Input Data Register ทุกๆ APB2 clock cycle
•    A read เข้าถึงไปยัง the Input Data Register จะได้รับ the I/O State.

Figure 15 แสดง the Input Configuration ของ the I/O Port bit.

(https://i.imgur.com/cN9rBxN.png)
1. VDD_FT เป็นศักยภาพเฉพาะสำหรับ I/Os ที่ทนต่อ 5 โวลต์และแตกต่างจาก VDD
Title: Re: STM32F1 GPIO
Post by: tha on November 16, 2020, 11:01:11 am
9.1.8 Output configuration
เมื่อ the I/O Port ถูกโปรแกรมเป็น Output:
•    The Output Buffer ถูกเปิดการใช้งาน:
      – Open Drain Mode: A “0” ใน the Output register ทำให้ the N-MOS ทำงาน ขณะที่ “1” ใน the Output register ทำให้
      the port อยู่ในสถานะอิมพิแด๊นต์สูง (Hi-Z )(the P-MOS จะไม่ถูกทำให้ทำงานเลย)
      ( Open Drain นี้จะต้องมี power supply ภายนอกมาต่อกัย load แล้วอีกขาหนึ่งของ load ก็มาต่อที่ output pin อีกที คือจะลงกราว
      น์ภายในตัว mcu )
      – Push-Pull Mode: A “0” in the Output register ทำให้ the N-MOS ทำงาน ขณะที่ “1” ใน the Output register ทำให้ P-
      MOS ทำงาน
      ( mcu จะเป็นตัวจ่ายไฟให้ load ภายนอก)
•    The Schmitt Trigger Input ถูกทำให้ทำงาน
•    The weak pull-up and pull-down resistors ถูกปิดการใช้งาน.
•    The data ที่แสดงบน  I/O pin จะถูกสุ่มเข้าไปใน Input Data Register ทุกๆ APB2 clock cycle
•    A read เข้าถึงไปยัง the Input Data Register จะได้รับ the I/O state ใน open drain mode
•    A read เข้าถึงไปยัง the Output Data register จะได้รับค่าที่เขียนเป็นครั้งสุดท้ายใน Push-Pull mode

Figure 16 แสดง the Output configuration of the I/O Port bit.

(https://i.imgur.com/EODLZDc.png)
1. VDD_FT เป็นศักยภาพเฉพาะสำหรับ I/Os ที่ทนต่อ 5 โวลต์และแตกต่างจาก VDD
Title: Re: STM32F1 GPIO
Post by: tha on November 16, 2020, 11:16:26 am
9.1.9 Alternate function configuration
เมื่อ the I/O Port ถูกโปรแกรมเป็น Alternate Function:
•    The Output Buffer ถูก turned on ใน Open Drain หรือ Push-Pull configuration
•    The Output Buffer ถูกขับโดย the signal ที่มาจาก the peripheral (alternate function out)
•    The Schmitt Trigger Input ถูกทำให้ทำงาน
•    The weak pull-up and pull-down resistors ถูกปิดการใช้งาน.
•    The data ที่แสดงบน  I/O pin จะถูกสุ่มเข้าไปใน Input Data Register ทุกๆ APB2 clock cycle
•    A read เข้าถึงไปยัง the Input Data Register จะได้รับ the I/O state ใน open drain mode
•    A read เข้าถึงไปยัง the Output Data register จะได้รับค่าที่เขียนเป็นครั้งสุดท้ายใน Push-Pull mode

Figure 17 แสดง the Alternate Function Configuration of the I/O Port bit. นอกจากนี้, อ้างอิงถึง Section 9.4: AFIO registers สำหรับข้อมูลเพิ่มเติม

ชุดของ Alternate Function I/O registers ยอมให้ผู้ใช้เปลี่ยนขา(remap) บาง alternate functions ไปยัง different pins. อ้างอิงถึง Section 9.3: Alternate function I/O and debug configuration (AFIO).

(https://i.imgur.com/G0EdR9z.png)
1. VDD_FT เป็นศักยภาพเฉพาะสำหรับ I/Os ที่ทนต่อ 5 โวลต์และแตกต่างจาก VDD
Title: Re: STM32F1 GPIO
Post by: tha on November 16, 2020, 11:31:39 am
9.1.10 Analog configuration
เมื่อ the I/O Port ถูกโปรแกรมเป็น Analog configuration:
•    The Output Buffer ถูกปิดการใช้งาน.
•    The Schmitt Trigger Input ถูกทำให้ไม่ทำงานจัดให้มีการกินพลังงานเป็นศูนย์สำหรับทุกๆ analog value ของ the I/O pin. The
      output ของ the Schmitt Trigger ถูกบังคับให้เป็นค่าคงที่ (0).
•    The weak pull-up and pull-down resistors ถูกปิดการใช้งาน.
•    Read เข้าถึงไปยัง the Input Data Register จะได้รับ the value “0”.

Figure 18 แสดง the high impedance-analog configuration of the I/O Port bit.

(https://i.imgur.com/4mB4PAd.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 17, 2020, 08:16:50 am
9.1.11 GPIO configurations for device peripherals
Table 22 ถึง Table 33 แสดง the GPIO configurations ของ the device peripherals.

(https://i.imgur.com/QHzLgRq.png)
(https://i.imgur.com/kV5EnQ7.png)
1. The USART_TX pin สามารถถูกกำหนดค่าเป็น alternate function open drain ได้อีกด้วย.
Title: Re: STM32F1 GPIO
Post by: tha on November 17, 2020, 08:30:20 am
(https://i.imgur.com/6k2J9Bn.png)
(https://i.imgur.com/X5u6QuJ.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 17, 2020, 08:50:45 am
(https://i.imgur.com/rlKDZri.png)
(https://i.imgur.com/52l0vca.png)
1. ตารางนี้ใช้กับ connectivity line devices เท่านั้น.
2. สำหรับ the OTG_FS_VBUS pin (PA9) ถูกใช้โดย peripheral อื่นที่ใช้ร่วมกันหรือเป็น a general-purpose IO, the PHY Power-down mode ต้องถูกทำให้ทำงาน (เคลียร์ bit 16 ใน the OTG_FS_GCCFG register).
Title: Re: STM32F1 GPIO
Post by: tha on November 17, 2020, 09:09:11 am
(https://i.imgur.com/V9u6bY7.png)

     The GPIO configuration ของ the ADC inputs ควรเป็น analog.
(https://i.imgur.com/sLsdQ2s.png)
(https://i.imgur.com/OY1B7u5.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 18, 2020, 08:09:47 am
9.2 GPIO registers
อ้างอิงถึง Section 2.2 บน page 45 สำหรับรายการตัวย่อที่ใช้ใน register descriptions.
The peripheral registers ต้องถูกเข้าถึงโดย words (32-bit).

(https://i.imgur.com/HmMdCWd.png)

Bits 31:30, 27:26,         CNFy[1:0]: Port x configuration bits (y= 0 .. 7)
23:22, 19:18, 15:14,     บิตเหล่านี้ถูกเขียนโดย software เพื่อกำหนดค่า the corresponding I/O port.
11:10, 7:6, 3:2              อ้างอิงถึง  Table 20: Port bit configuration table.
                                    In input mode (MODE[1:0]=00):
                                    00: Analog mode
                                    01: Floating input (reset state)
                                    10: Input with pull-up / pull-down
                                    11: Reserved
                                    In output mode (MODE[1:0] > 00):
                                    00: General purpose output push-pull
                                    01: General purpose output Open-drain
                                    10: Alternate function output Push-pull
                                    11: Alternate function output Open-drain

Bits 29:28, 25:24,          MODEy[1:0]: Port x mode bits (y= 0 .. 7)
21:20, 17:16, 13:12,      บิตเหล่านี้ถูกเขียนโดย software เพื่อกำหนดค่า the corresponding I/O port.
9:8, 5:4, 1:0                  อ้างอิงถึง Table 20: Port bit configuration table.
                                     00: Input mode (reset state)
                                     01: Output mode, max speed 10 MHz.
                                     10: Output mode, max speed 2 MHz.
                                     11: Output mode, max speed 50 MHz.
Title: Re: STM32F1 GPIO
Post by: tha on November 18, 2020, 08:30:31 am
(https://i.imgur.com/eFf8T26.png)

Bits 31:30, 27:26,         CNFy[1:0]: Port x configuration bits (y= 8 .. 15)
23:22, 19:18, 15:14,     บิตเหล่านี้ถูกเขียนโดย software เพื่อกำหนดค่า the corresponding I/O port.
11:10, 7:6, 3:2              อ้างอิงถึง  Table 20: Port bit configuration table.
                                    In input mode (MODE[1:0]=00):
                                    00: Analog mode
                                    01: Floating input (reset state)
                                    10: Input with pull-up / pull-down
                                    11: Reserved
                                    In output mode (MODE[1:0] > 00):
                                    00: General purpose output push-pull
                                    01: General purpose output Open-drain
                                    10: Alternate function output Push-pull
                                    11: Alternate function output Open-drain

Bits 29:28, 25:24,          MODEy[1:0]: Port x mode bits (y= 8 .. 15)
21:20, 17:16, 13:12,      บิตเหล่านี้ถูกเขียนโดย software เพื่อกำหนดค่า the corresponding I/O port.
9:8, 5:4, 1:0                  อ้างอิงถึง Table 20: Port bit configuration table.
                                     00: Input mode (reset state)
                                     01: Output mode, max speed 10 MHz.
                                     10: Output mode, max speed 2 MHz.
                                     11: Output mode, max speed 50 MHz.

Title: Re: STM32F1 GPIO
Post by: tha on November 18, 2020, 08:53:50 am
(https://i.imgur.com/tf8xJNj.png)

Bits 31:16 Reserved, must be kept at reset value.
Bits 15:0 IDRy: Port input data (y= 0 .. 15)
              บิตเหล่านี้ถูกอ่านได้เพียงอย่างเดียวและสามารถถูกเข้าถึงใน Word mode เท่านั้น. มันบรรจุ the input value ของ the
              corresponding I/O port.
Title: Re: STM32F1 GPIO
Post by: tha on November 18, 2020, 09:03:19 am
(https://i.imgur.com/kO7VUTg.png)

Bits 31:16 Reserved, must be kept at reset value.

Bits 15:0 ODRy: Port output data (y= 0 .. 15)
              บิตเหล่านี้สามารถถูกอ่านและเขียนโดย software และสามารถถูกเข้าถึงใน Word mode เท่านั้น.
      Note: สำหรับ atomic bit set/reset, the ODR bits สามารถเซ็ตและเคลียร์เฉพาะรายโดยการเขียนไปยัง the
              GPIOx_BSRR register (x = A .. G).
Title: Re: STM32F1 GPIO
Post by: tha on November 18, 2020, 09:19:22 am
(https://i.imgur.com/Dmq5KSY.png)

Bits 31:16 BRy: Port x Reset bit y (y= 0 .. 15)
     บิตเหล่านี้เขียนได้เพียงอย่างเดียวและสามารถถูกเข้าถึงใน Word mode เท่านั้น.
     0: ไม่มีการทำอะไรบน the corresponding ODRx bit
     1: Reset the corresponding ODRx bit
Note: ถ้าทั้ง BSx และ BRx ถูก set, BSx มีลำดับความสำคัญ(ที่สูงกว่า)

Bits 15:0 BSy: Port x Set bit y (y= 0 .. 15)
     บิตเหล่านี้เขียนได้เพียงอย่างเดียวและสามารถถูกเข้าถึงใน Word mode เท่านั้น.
     0: ไม่มีการทำอะไรบน the corresponding ODRx bit
     1: Set the corresponding ODRx bit
Title: Re: STM32F1 GPIO
Post by: tha on November 18, 2020, 09:24:21 am
(https://i.imgur.com/YMypg91.png)

Bits 31:16 Reserved

Bits 15:0 BRy: Port x Reset bit y (y= 0 .. 15)
     บิตเหล่านี้เขียนได้เพียงอย่างเดียวและสามารถถูกเข้าถึงใน Word mode เท่านั้น.
     0: No action on the corresponding ODRx bit
     1: Reset the corresponding ODRx bit
Title: Re: STM32F1 GPIO
Post by: tha on November 18, 2020, 11:07:54 am
9.2.7 Port configuration lock register (GPIOx_LCKR) (x=A..G)
register นี้ถูกใช้เพื่อล็อค the configuration ของ the port bits เมื่อ a correct write sequence ถูกนำไปใช้กับ bit 16 (LCKK). ค่าของ bits [15:0] ถูกใช้เพื่อล็อค the configuration ของ the GPIO. ในระหว่าง the write sequence, ค่าของ LCKR[15:0] ต้องไม่ถูกเปลี่ยน. เมื่อ the LOCK sequence ถูกนำไปใช้บน a port bit แล้วมันไม่สามารถที่จะแก้ไขค่าของ the port bit ได้อีกต่อไปจนกระทั่งการรีเซ็ตถัดไป.

แต่ละ lock bit จะแช่แข็ง the corresponding 4 bits ของ the control register (CRL, CRH).

Address offset: 0x18
Reset value: 0x0000 0000

(https://i.imgur.com/XlgfY6r.png)

Bits 31:17 Reserved

Bit 16 LCKK[16]: Lock key
บิตนี้สามารถถูกอ่านได้ตลอดเวลา. มันสามารถถูกแก้ไขได้เพียงการใช้ the Lock Key Writing Sequence.
     0: Port configuration lock key ไม่ active
     1: Port configuration lock key active. GPIOx_LCKR register ถูกล็อคจนกระทั่ง the next reset.

LOCK key writing sequence:
     Write 1
     Write 0
     Write 1
     Read 0
     Read 1(การอ่านนี้เป็นทางเลือก แต่ยืนยันว่าการล็อกทำงานอยู่)
Note: ในระหว่าง the LOCK Key Writing sequence, ค่าของ LCKR[15:0] ต้องไม่ถูกเปลี่ยน. ข้อผิดพลาดใด ๆใน the lock sequence จะยกเลิก the lock.

Bits 15:0 LCKy: Port x Lock bit y (y= 0 .. 15)
บิตเหล่านี้ถูกอ่านเขียนได้แต่สามารถถูกเขียนได้เพียงเมื่อ the LCKK bit เป็น 0.
     0: Port configuration ไม่ locked
     1: Port configuration locked
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 08:12:47 am
9.3 Alternate function I/O and debug configuration (AFIO)
เพื่อทำจำนวนของ peripheral ให้เหมาะที่สุดที่มีให้ใช้สำหรับ the 64-pin หรือ the 100-pin หรือ the 144-pin package, มันสามารถที่จะเปลี่ยนขา(remap) บาง alternate functions ไปยังบางพินอื่นๆ. นี้ถูกทำให้สำเร็จลงโดย software, โดยการโปรแกรม he AF remap and debug I/O configuration register (AFIO_MAPR).. ในกรณีนี้, the alternate functions จะไม่ถูก mapped เข้ากับการกำหนดเดิม(original assignations) อีกต่อไป
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 08:26:41 am
9.3.1 การใช้ OSC32_IN/OSC32_OUT pins เป็น GPIO ports PC14/PC15
The LSE oscillator pins OSC32_IN และ OSC32_OUT สามารถถูกใช้เป็น general-purpose I/O PC14 และ PC15, ตามลำดับ, เมื่อ the LSE oscillator ถูก off. The LSE มีลำดับความสำคัญเหนือ the GP IOs function.

Note: The PC14/PC15 GPIO functionality จะหายไปเมื่อ the 1.8 V domain ถูก powered off (โดยการเข้าสู่ standby mode) หรือเมื่อ the backup domain ถูกจ่ายไฟโดย VBAT (VDD ไม่ได้จ่ายไฟอีกต่อไป). ในกรณีนี้ the IOs นี้จะถูกเซ็ตใน analog mode.

อ้างอิงถึงหมายเหตุข้อจำกัดการใช้ IO (IO usage restrictions) ใน Section 5.1.2: Battery backup domain.
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 08:44:02 am
9.3.2 Using OSC_IN/OSC_OUT pins as GPIO ports PD0/PD1
The HSE oscillator pins OSC_IN/OSC_OUT สามารถถูกใช้เป็น general-purpose I/O PD0/PD1 โดยการโปรแกรม the PD01_REMAP bit ใน the AF remap and debug I/O configuration register (AFIO_MAPR).

การเปลี่ยนขา(remap)นี้มีให้ใช้เพียงบน 36-, 48- และ 64-pin packages (PD0 และ PD1 มีให้ใช้บน 100-pin and 144-pin packages, ไม่มีความจำเป็นสำหรับการเปลี่ยนขา).

Note: The external interrupt/event function ไม่ถูก remapped. PD0 and PD1 ไม่สามารถถูกใช้สำหรับ external interrupt/event generation บน 36-, 48- and 64-pin packages.
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 09:16:21 am
9.3.3 CAN1 alternate function remapping
The CAN signals สามารถถูก mapped บน Port A, Port B หรือ Port D ดังแสดงใน Table 34. สำหรับ port D, การเปลี่ยนขาไม่สามารถเป็นได้ใน devices ที่จัดส่งใน 36-, 48- and 64-pin packages.

(https://i.imgur.com/kJjrdir.png)

1. CAN1_RX and CAN1_TX ใน connectivity line devices; CAN_RX and CAN_TX ใน devices อื่นๆที่มี a single CAN interface.
2. Remap ไม่มีให้ใช้บน 36-pin package
3. การเปลี่ยนขานี้มีให้ใช้เพียงบน 100-pin and 144-pin packages, เมื่อ PD0 และ PD1 ไม่ได้ถูกเปลี่ยนขาบน OSC-IN and OSC-OUT
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 09:21:56 am
9.3.4 CAN2 alternate function remapping
CAN2 มีให้ใช้ใน connectivity line devices. The external signal สามารถถูกเปลี่ยนขาดังแสดงใน Table 35.

(https://i.imgur.com/66YcbDs.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 09:54:15 am
9.3.5 JTAG/SWD alternate function remapping
The debug interface signals ถูก mapped บน the GPIO ports ดังแสดงใน Table 36.

(https://i.imgur.com/R9GMMVQ.png)

เพื่อทำจำนวนของ free(เป็นอิสระ) GPIOs ให้เหมาะในระหว่าง debugging, การแมปนี้สามารถถูกกำหนดค่าในวิธีต่างๆโดยการโปรแกรม the SWJ_CFG[1:0] bits ใน the AF remap and debug I/O configuration register (AFIO_MAPR). อ้างอิงถึง Table 37.

(https://i.imgur.com/UbMew9J.png)
1. ถูกปลดปล่อยได้เพียงถ้าไม่ใช้ asynchronous trace.
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 10:10:21 am
9.3.6 ADC alternate function remapping
อ้างอิงถึง AF remap and debug I/O configuration register (AFIO_MAPR).

(https://i.imgur.com/GTm6TCa.png)
(https://i.imgur.com/xmhsiZ4.png)
1. Remap มีให้ใช้เพียงสำหรับ high-density and XL-density devices.
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 10:37:20 am
9.3.7 Timer alternate function remapping
Timer 4 channels 1 ถึง 4 สามารถถูก remapped จาก Port B ไปยัง Port D. timer remapping อื่นๆที่สามารถเป็นได้ถูกทำรายการใน Table 44 ถึง Table 46. อ้างอิงถึง AF remap and debug I/O configuration register (AFIO_MAPR).

(https://i.imgur.com/SWHxI8P.png)

(https://i.imgur.com/XmqJlXR.png)
1. Remap ไม่มีให้ใช้บน 36-pin package.
2. TIM_CH1 and TIM_ETR ใช้ร่วม the same pin แต่ไม่สามารถถูกใช้ในเวลาเดียวกัน (ซึ่งเป็นสาเหตุที่เรามี notation นี้ : TIM2_CH1_ETR).

(https://i.imgur.com/ULAtWFd.png)

(https://i.imgur.com/Dh44Ggg.png)

(https://i.imgur.com/PRVInCH.png)

ปล. ช้าไปหรือเร็วไปหล่ะ บอกมาได้นะครับ
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 10:43:13 am
9.3.8 USART alternate function remapping
Refer to AF remap and debug I/O configuration register (AFIO_MAPR).

(https://i.imgur.com/iMKtE3G.png)

(https://i.imgur.com/CXubnLm.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 10:49:15 am
9.3.9 I2C1 alternate function remapping
Refer to AF remap and debug I/O configuration register (AFIO_MAPR)

(https://i.imgur.com/NdCZs8w.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 10:50:41 am
9.3.10 SPI1 alternate function remapping
Refer to AF remap and debug I/O configuration register (AFIO_MAPR)

(https://i.imgur.com/auLCXZo.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 10:52:07 am
9.3.11 SPI3/I2S3 alternate function remapping
Refer to AF remap and debug I/O configuration register (AFIO_MAPR). This remap is available only in connectivity line devices

(https://i.imgur.com/pr5qyWY.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 19, 2020, 10:53:36 am
9.3.12 Ethernet alternate function remapping
Refer to AF remap and debug I/O configuration register (AFIO_MAPR). Ethernet is available only in connectivity line devices.

(https://i.imgur.com/ABFPwhN.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 20, 2020, 08:20:00 am
9.4 AFIO registers
อ้างอิงถึง Section 2.2 บนหน้า 45 สำหรับรายการของตัวย่อที่ใช้ใน register descriptions.

Note: เพื่อ read/write the AFIO_EVCR, AFIO_MAPR and AFIO_EXTICRX registers, the AFIO clock ควรถูกเปิดการใช้งานเป็นอันดับแรก. อ้างอิงถึง Section 7.3.7: APB2 peripheral clock enable register(RCC_APB2ENR).

The peripheral registers ต้องถูกเข้าถึงโดย words (32-bit).

(https://i.imgur.com/7aENpmR.png)

Bits 31:8 Reserved

Bit 7 EVOE: Event output enable
เซ็ตและเคลียร์โดย software. เมื่อเซ็ต the EVENTOUT Cortex® output ถูกต่อไปยัง the I/O ที่เลือกโดย the PORT[2:0] และ PIN[3:0] bits.

Bits 6:4 PORT[2:0]: Port selection
เซ็ตและเคลียร์โดย software. เลือก the port ที่ใช้เพื่อส่งออก the Cortex® EVENTOUT signal.
Note: The EVENTOUT signal output capability ไม่ได้ถูกต่อไปยัง ports PF และ PG.
     000: PA ถูกเลือก
     001: PB selected
     010: PC selected
     011: PD selected
     100: PE selected

Bits 3:0 PIN[3:0]: Pin selection (x = A .. E)
เซ็ตและเคลียร์โดย software. เลือก the pin ที่ใช้เพื่อส่งออก the Cortex® EVENTOUT signal.
     0000: Px0 ถูกเลือก
     0001: Px1 selected
     0010: Px2 selected
     0011: Px3 selected
     ...
     1111: Px15 selected
Title: Re: STM32F1 GPIO
Post by: tha on November 20, 2020, 09:12:40 am
(https://i.imgur.com/urMfFYd.png)

Bits 31:27 Reserved

Bits 26:24 SWJ_CFG[2:0]: Serial wire JTAG configuration
บิตเหล่านี้เขียนได้เพียงอย่างเดียว (เมื่ออ่าน, ค่าที่ได้จะนิยามไม่ได้). มันถูกใช้เพื่อกำหนด the SWJ และ trace alternate function I/Os. The SWJ (Serial Wire JTAG) รองรับ JTAG หรือ SWD เข้าถึงยัง Cortex® debug port. สถานะเริ่มต้นหลังจาก reset คือ SWJ ON โดยปราศจาก trace. นี้ยอมให้ JTAG หรือ SW mode ถูกเปิดการใช้งานโดยการส่ง a specific sequence ไปบน the JTMS /JTCK pin.
     000: Full SWJ (JTAG-DP + SW-DP): Reset State
     001: Full SWJ (JTAG-DP + SW-DP) แต่ปราศจาก NJTRST
     010: JTAG-DP ถูกปิดการใช้งาน และ SW-DP ถูกเปิดการใช้งาน
     100: JTAG-DP ถูกปิดการใช้งาน และ SW-DP ถูกปิดการใช้งาน
     การรวมอย่างอื่น : ไม่มีผลอะไร

Bits 23:21 Reserved.

Bits 20 ADC2_ETRGREG_REMAP: ADC 2 external trigger regular conversion remapping
เซ็ตและเคลียร์โดย software. บิตนี้ควบคุม the trigger input ที่ต่อไปยัง ADC2 external trigger regular conversion. เมื่อบิตนี้ถูก reset, the ADC2 external trigger regular conversion ถูกต่อไปยัง EXTI11.  เมื่อบิตนี้ถูก set, the ADC2 external event regular conversion ถูกต่อไปยัง TIM8_TRGO.

Bits 19 ADC2_ETRGINJ_REMAP: ADC 2 external trigger injected conversion remapping
เซ็ตและเคลียร์โดย software. บิตนี้ควบคุม the trigger input ที่ต่อไปยัง ADC2 external trigger injected conversion. เมื่อบิตนี้ถูก reset, the ADC2 external trigger injected conversion ถูกต่อไปยัง EXTI15. เมื่อบิตนี้ถูก set, the ADC2 external event injected conversion ถูกต่อไปยัง TIM8_Channel4.

Bits 18 ADC1_ETRGREG_REMAP: ADC 1 external trigger regular conversion remapping
เซ็ตและเคลียร์โดย software. บิตนี้ควบคุม the trigger input ที่ต่อไปยัง ADC1 External trigger regular conversion. เมื่อ reset the ADC1 External trigger regular conversion ถูกต่อไปยัง EXTI11. เมื่อ set the ADC1 External Event regular conversion ถูกต่อไปยัง TIM8 TRGO.
Title: Re: STM32F1 GPIO
Post by: tha on November 20, 2020, 09:31:25 am
Bits 17 ADC1_ETRGINJ_REMAP: ADC 1 External trigger injected conversion remapping
เซ็ตและเคลียร์โดย software. บิตนี้ควบคุม the trigger input ที่ต่อไปยัง ADC1 External trigger injected conversion. เมื่อ reset the ADC1 External trigger injected conversion ถูกต่อไปยัง EXTI15. เมื่อ set the ADC1 External Event injected conversion ถูกต่อไปยัง TIM8 Channel4.

Bits 16 TIM5CH4_IREMAP: TIM5 channel4 internal remap
เซ็ตและเคลียร์โดย software. บิตนี้ควบคุม the TIM5_CH4 การ mapping ถึงกันภายใน. เมื่อ reset the timer TIM5_CH4 ถูกต่อไปยัง PA3. เมื่อ set the LSI internal clock ถูกต่อไปยัง TIM5_CH4 input สำหรับ calibration purpose.
Note: บิตนี้มีให้ใช้เพียงใน high density value line devices.

Bit 15 PD01_REMAP: Port D0/Port D1 mapping on OSC_IN/OSC_OUT
เซ็ตและเคลียร์โดย software. บิตนี้ควบคุม the mapping ของ PD0 and PD1 GPIO functionality. เมื่อ the HSE oscillator ไม่ได้ถูกใช้ (application รันบน internal 8 MHz RC) PD0 และ PD1 สามารถถูก mapped บน OSC_IN และ OSC_OUT. นี้มีให้ใช้เพียงบน 36-, 48- และ 64-pin packages (PD0 and PD1 มีให้ใช้บน 100-pin and 144-pin packages, ไม่จำเป็นสำหรับการ remapping).
     0: ไม่มีการ remapping ของ PD0 and PD1
     1: PD0 remapped on OSC_IN, PD1 remapped on OSC_OUT,
Title: Re: STM32F1 GPIO
Post by: tha on November 20, 2020, 09:51:59 am
Bits 14:13 CAN_REMAP[1:0]: CAN alternate function remapping
บิตเหล่านี้เซ็ตและเคลียร์โดย software. มันควบคุม the mapping ของ alternate functions CAN_RX และ CAN_TX ใน devices ที่มี a single CAN interface.
     00: CAN_RX mapped to PA11, CAN_TX mapped to PA12
     01: ไม่ใช้
     10: CAN_RX mapped to PB8, CAN_TX mapped to PB9 (ไม่มีให้ใช้บน 36-pin package)
     11: CAN_RX mapped to PD0, CAN_TX mapped to PD1

Bit 12 TIM4_REMAP: TIM4 remapping
บิตนี้เซ็ตและเคลียร์โดย software. มันควบคุม the mapping ของ TIM4 channels 1 ถึง 4 ไปบน the GPIO ports.
     0: No remap (TIM4_CH1/PB6, TIM4_CH2/PB7, TIM4_CH3/PB8, TIM4_CH4/PB9)
     1: Full remap (TIM4_CH1/PD12, TIM4_CH2/PD13, TIM4_CH3/PD14, TIM4_CH4/PD15)
Note: TIM4_ETR บน PE0 ไม่ถูก re-mapped.

Bits 11:10 TIM3_REMAP[1:0]: TIM3 remapping
บิตเหล่านี้เซ็ตและเคลียร์โดย software. มันควบคุม the mapping ของ TIM3 channels 1 ถึง 4 บน the GPIO ports.
     00: No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1)
     01: Not used
     10: Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1)
     11: Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)
Note: TIM3_ETR บน PE0 ไม่ถูก re-mapped.

Bits 9:8 TIM2_REMAP[1:0]: TIM2 remapping
บิตเหล่านี้เซ็ตและเคลียร์โดย software. มันควบคุม the mapping ของ TIM2 channels 1 ถึง 4 และ external trigger (ETR) บน the GPIO ports.
     00: No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3)
     01: Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3)
     10: Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11)
     11: Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11)
Title: Re: STM32F1 GPIO
Post by: tha on November 20, 2020, 10:05:18 am
Bits 7:6 TIM1_REMAP[1:0]: TIM1 remapping
These bits are set and cleared by software. They control the mapping of TIM1 channels 1 to
4, 1N to 3N, external trigger (ETR) and Break input (BKIN) on the GPIO ports.
     00: No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12,
           CH1N/PB13, CH2N/PB14, CH3N/PB15)
     01: Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6,
          CH1N/PA7, CH2N/PB0, CH3N/PB1)
     10: not used
     11: Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15,
          CH1N/PE8, CH2N/PE10, CH3N/PE12)

Bits 5:4 USART3_REMAP[1:0]: USART3 remapping
These bits are set and cleared by software. They control the mapping of USART3 CTS,
RTS,CK,TX and RX alternate functions on the GPIO ports.
     00: No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14)
     01: Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14)
     10: not used
     11: Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12)

Bit 3 USART2_REMAP: USART2 remapping
This bit is set and cleared by software. It controls the mapping of USART2 CTS, RTS,CK,TX
and RX alternate functions on the GPIO ports.
     0: No remap (CTS/PA0, RTS/PA1, TX/PA2, RX/PA3, CK/PA4)
     1: Remap (CTS/PD3, RTS/PD4, TX/PD5, RX/PD6, CK/PD7)

Bit 2 USART1_REMAP: USART1 remapping
This bit is set and cleared by software. It controls the mapping of USART1 TX and RX
alternate functions on the GPIO ports.
     0: No remap (TX/PA9, RX/PA10)
     1: Remap (TX/PB6, RX/PB7)

Bit 1 I2C1_REMAP: I2C1 remapping
This bit is set and cleared by software. It controls the mapping of I2C1 SCL and SDA
alternate functions on the GPIO ports.
     0: No remap (SCL/PB6, SDA/PB7)
     1: Remap (SCL/PB8, SDA/PB9)

Bit 0 SPI1_REMAP: SPI1 remapping
This bit is set and cleared by software. It controls the mapping of SPI1 NSS, SCK, MISO,
MOSI alternate functions on the GPIO ports.
     0: No remap (NSS/PA4, SCK/PA5, MISO/PA6, MOSI/PA7)
     1: Remap (NSS/PA15, SCK/PB3, MISO/PB4, MOSI/PB5)
Title: Re: STM32F1 GPIO
Post by: tha on November 20, 2020, 11:13:17 am
(https://i.imgur.com/pzPeeRP.png)
(https://i.imgur.com/K2SGucz.png)
(https://i.imgur.com/F8yMqTk.png)
(https://i.imgur.com/yrxCHO1.png)

ปล. มันก็เหมือนกันแหละ คงจะเข้าใจกันแล้ว ขอไม่แปลนะ จะได้ไปไวๆ
Title: Re: STM32F1 GPIO
Post by: tha on November 20, 2020, 11:38:24 am
(https://i.imgur.com/wCiPy0C.png)

Bits 31:16 Reserved

Bits 15:0 EXTIx[3:0]: EXTI x configuration (x= 0 to 3)
บิตเหล่านี้ถูกเขียนโดย software เพื่อเลือก the source input สำหรับ EXTIx external interrupt.
อ้างอิงถึง Section 10.2.5: External interrupt/event line mapping
(https://i.imgur.com/gEwRD5d.png)

(https://i.imgur.com/Og5hywU.png)

Bits 31:16 Reserved

Bits 15:0 EXTIx[3:0]: EXTI x configuration (x= 4 to 7)
บิตเหล่านี้ถูกเขียนโดย software เพื่อเลือก the source input สำหรับ EXTIx external interrupt.
(https://i.imgur.com/gEwRD5d.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 20, 2020, 11:46:04 am
(https://i.imgur.com/IszZB56.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 20, 2020, 11:50:15 am
(https://i.imgur.com/AIkmUEl.png)
Title: Re: STM32F1 GPIO
Post by: tha on November 20, 2020, 11:56:44 am
(https://i.imgur.com/aRLEcKD.png)
(https://i.imgur.com/othEEpy.png)
(https://i.imgur.com/PjIdd21.png)

ปล. จบอีกแล้ว พรุ่งนี้จะได้ขึ้น TIM1 & 8