Điều gì xảy ra trên STM32 khi hai chân được cấu hình để có cùng chức năng thay thế?


10

Đọc qua hướng dẫn STM32F051, có vẻ như có thể định cấu hình cùng chức năng thay thế trên hai chân; ví dụ: bạn có thể có nhiều chân USART1_TX cùng một lúc. Hoặc ví dụ như trường hợp có nhiều vấn đề hơn của hai chân USART_RX. Hướng dẫn là im lặng trong trường hợp này. Đây có phải là hợp pháp / an toàn? Điều này có hữu ích không?


2
Câu hỏi thú vị. Tôi có thể thấy lý do tại sao đôi khi nó sẽ hữu ích, ví dụ như trong khi gỡ lỗi để đưa đầu ra TX sang một pin khác hoặc để có được đồng hồ đệm ở một vài nơi. Có thể đáng để thêm vào liên kết thủ công có liên quan mặc dù để cứu bất kỳ ai phải tìm kiếm nó.
PeterJ

Một lần nữa - Câu hỏi thú vị. Nhưng còn trường hợp gán USART_RX từ hai chân khác nhau thì sao? Người ta sẽ hy vọng rằng các nhà thiết kế chip đã lên kế hoạch cho một kế hoạch ưu tiên cho nhau, trái ngược với việc cho phép tranh chấp nội bộ từ hai nguồn.
Michael Karas

Tôi chưa bao giờ thử điều này, nhưng dựa trên những gì tôi nhớ lại từ sơ đồ pin, về cơ bản, cuối cùng bạn sẽ kết nối các chân với nhau.
rjp

Câu trả lời:


5

Trên các bộ xử lý sử dụng các thanh ghi trên mỗi pin để chọn các chức năng I / O, thông thường có thể định tuyến một chức năng đầu ra đến nhiều chân mà không có xung đột; tất cả các chân sẽ lặp lại cùng một đầu ra. Hiệu quả của việc có nhiều chân kết nối với đầu vào thường không được chỉ định; nếu ví dụ, một UART có các chân I / O 3 và 4 được kết nối với UART, thì nó có thể hoạt động như thể UART được kết nối với cổng "VÀ" lấy các chân 3 và 4 làm đầu vào, hoặc nó có thể hoạt động như thể nó được kết nối với một chân và bỏ qua chân kia, hoặc nó có thể kết nối cả hai chân với bộ đệm đầu vào của UART thông qua các bóng bán dẫn có điện trở vừa phải hoặc nó có thể rút thêm dòng điện khi chân 3 cao và 4 thấp hoặc ngược lại, hoặc nó có thể làm bất cứ điều gì khác có thể tưởng tượng. Tôi không

Một cách tiếp cận thiết kế đẹp hơn, được sử dụng trong một số bộ phận của Microchip (có lẽ cả một số bộ phận STM) là để mỗi chức năng I / O bao gồm một bộ ghép kênh để chọn pin nào nên chấp nhận đầu vào và có pin bao gồm bộ ghép kênh để chỉ ra I Hàm / O từ đó sẽ xuất dữ liệu. Thiết kế như vậy làm cho nó có thể có một nguồn cấp dữ liệu nhiều chức năng I / O, đồng thời loại bỏ bất kỳ sự mơ hồ nào được đặt ra bởi các cấu hình xung đột.


3

Vâng, nó rất hữu ích. Kết quả từ thử nghiệm trên STM32F407VGT6: Cả hai chân AF có thể được sử dụng đồng thời làm AF, ít nhất là nếu sử dụng các chân này làm đầu vào AF. Thí nghiệm là để kích hoạt TIM1 trên cạnh tăng của kích hoạt bên ngoài - tín hiệu "TIM1_ETR". Tín hiệu "TIM1_ETR" có thể được ánh xạ tới các chân PE7 và / hoặc PA12 của gói MCU.

Thử nghiệm: Khởi tạo cả hai chân PE7 và PA12 dưới dạng AF "TIM1_ETR" cho TIM1:

{
    GPIO_InitTypeDef GPIO_InitStruct = { 0 };
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Pin = GPIO_PIN_7;
    HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); // configure PE7 as AF

    GPIO_InitStruct.Pin = GPIO_PIN_12;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // configure PA12 as AF
}

Kết quả - TIM1 được bắt đầu bằng cách tăng cạnh trên bất kỳ chân PE7 hoặc PA12 nào.

Điều này cho thấy cách để các chân AF MUX (thay đổi) trong thời gian chạy:

main
{
  GPIO_InitTypeDef GPIO_InitStruct = { 0 };

// Deactivate PA12 input (set as regular input):
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
        GPIO_InitStruct.Pin = GPIO_PIN_12;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// select PE7 as a trigger source,
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pin = GPIO_PIN_7;
        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

// Arm the timer
    arm_tim1();

/* Now timer will be started by rising edge only on PE7 */

// ... later one can select PA12 as trigger source. Deactivate PE7 (set as regular input):
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
        GPIO_InitStruct.Pin = GPIO_PIN_7;
        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

// Activate PA12
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pin = GPIO_PIN_12;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// Arm the timer
    arm_tim1();
/* timer will be started by rising edge only on PA12 */
}

Điều này có thể hữu ích sau đó cần hai nguồn khác nhau để kích hoạt bộ đếm thời gian, điều này có thể giúp chúng tôi tiết kiệm IC MUX :). Cả hai đầu vào có thể được sử dụng đồng thời, nếu được khởi tạo như thể hiện ở đầu bài. Các đầu vào không được kết nối với nhau, ý tôi là tín hiệu trên PA12 không được chuyển sang PE7 và ngược lại (vì GPIO được đặt làm đầu vào).

Mã được tạo bởi "STM32CubeF4 v5.3" + "Gói phần sụn v1.24.0 / 08-tháng 2-2019."


2

Về cơ bản, các chân là GPIO có thể được gán cho các chức năng thay thế, ví dụ UART_RX. Mỗi chức năng thay thế đều có chân mặc định và các chân thay thế mà chức năng có thể được ánh xạ lại. Nếu bạn xem hướng dẫn tham khảo của STM32F103 trong phần 9.1.5, họ nói:

Để tối ưu hóa số lượng chức năng I / O ngoại vi cho các gói thiết bị khác nhau, có thể ánh xạ lại một số chức năng thay thế cho một số chân khác. Điều này đạt được bằng phần mềm, bằng cách lập trình các thanh ghi tương ứng (tham khảo các thanh ghi AFIO ở trang 177. Trong trường hợp đó, các hàm thay thế không còn được ánh xạ tới các gán ban đầu của chúng .


Cách tôi tìm hiểu điều này là: một khi bạn gán các chân mới, việc gán trước đó sẽ bị xóa, do đó về mặt kỹ thuật, bạn không thể có nhiều chân được kết nối với cùng một chức năng ngoại vi.
dext0rb

1
Không thể, bởi vì (ít nhất là trên F103, tôi đã không làm việc với các dẫn xuất khác của STM32), pin thay thế không thể được gán cho chức năng mà không sử dụng tính năng ánh xạ lại, ngay cả khi bạn thiết lập nó là AF_Output trong thiết lập GPIO. Và sau khi ánh xạ lại, chức năng i không còn có sẵn trên pin gốc. Tôi hy vọng điều này làm rõ những gì tôi có ý nghĩa.
Manu3l0us

1
Cách thức này được thực hiện rất khác nhau trên các tiểu thư khác nhau. Cấu trúc thanh ghi F1 có thể cấm nó, nhưng cấu trúc F3 thì khác, trong đó bạn định cấu hình pin cho một chức năng thay thế thay vì chức năng cho một pin, do đó ánh xạ trùng lặp dường như có thể. Trong thực tế, bạn không trả lời tình huống của câu hỏi, dường như là về một phần mà cấu trúc đăng ký cho phép nó.
Chris Stratton

1
@Chris Stratton STM32F302 Hướng dẫn tham khảo phần 8.3.2: "Các chân I / O của thiết bị được kết nối với các thiết bị ngoại vi / mô-đun trên bo mạch thông qua bộ ghép kênh chỉ cho phép một chức năng thay thế (AF) ngoại vi được kết nối với chân I / O tại một thời điểm. bằng cách này, không thể có xung đột giữa các thiết bị ngoại vi có sẵn trên cùng một pin I / O. " Nhưng thực tế, điều này không nói lên điều gì về nhiều I / O trên một AF. Thậm chí có nhiều tùy chọn cho chân đầu vào?
Manu3l0us

1
Tôi cũng đánh giá cao thông tin F1x, tôi cũng đã sử dụng thông tin đó :-)
joeforker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.