洪嵐峰 發表於 2023-4-12 20:51:55

SAMV71J20B

SAMV71J20B 微控制器通常用於嵌入式系統的開發,可以使用 C 語言編寫 PLC 程序。

以下是一個示例程序,實現了讀取 GPIO 狀態並將其輸出到串口:

c
#include <stdint.h>
#include "samv71q21.h"

#define UART_TX_PIN PIO_PB4A_TXD1
#define UART_RX_PIN PIO_PB5A_RXD1

#define GPIO_PIN PIO_PB27

int main() {
    // 使能 PIOB 時鐘
    PMC->PMC_PCER0 |= PMC_PCER0_PID12;

    // 配置 UART1
    PIOB->PIO_PDR |= UART_TX_PIN | UART_RX_PIN;
    PIOB->PIO_ABSR &= ~(UART_TX_PIN | UART_RX_PIN);

    // 配置 GPIO
    PIOB->PIO_PER |= GPIO_PIN;
    PIOB->PIO_ODR |= GPIO_PIN;
    PIOB->PIO_PUER |= GPIO_PIN;

    // 配置串口波特率為 115200
    uint32_t uart_clock = SystemCoreClock / 2;
    uint32_t baudrate = 115200;
    uint16_t cd = (uint16_t)(uart_clock / (16 * baudrate));
    UART1->UART_BRGR = cd;

    // 啟動串口
    UART1->UART_CR |= UART_CR_TXEN | UART_CR_RXEN;

    while (1) {
        // 讀取 GPIO 狀態並輸出到串口
        uint32_t status = PIOB->PIO_PDSR & GPIO_PIN;
        char buf;
        snprintf(buf, sizeof(buf), "GPIO status: %d\r\n", status ? 1 : 0);
        for (int i = 0; buf != '\0'; i++) {
            while (!(UART1->UART_SR & UART_SR_TXRDY));
            UART1->UART_THR = buf;
        }

        // 延時 500ms
        for (int i = 0; i < 500000; i++) {
            __NOP();
        }
    }

    return 0;
}
該程序使用 SAMV71J20B 的 PIOB 模塊讀取 GPIO 狀態,並使用 UART1 模塊將 GPIO 狀態輸出到串口。

程序中還使用了 PMC 模塊使能 PIOB 時鐘等。
頁: [1]
查看完整版本: SAMV71J20B