- UID
- 373967
- 帖子
- 8867
- 主題
- 2609
- 精華
- 0
- 積分
- 1000
- 楓幣
- 15
- 威望
- 977
- 存款
- 34822
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1205
- 閱讀權限
- 70
- 在線時間
- 455 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2024-11-22
|
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[32];
snprintf(buf, sizeof(buf), "GPIO status: %d\r\n", status ? 1 : 0);
for (int i = 0; buf[i] != '\0'; i++) {
while (!(UART1->UART_SR & UART_SR_TXRDY));
UART1->UART_THR = buf[i];
}
// 延時 500ms
for (int i = 0; i < 500000; i++) {
__NOP();
}
}
return 0;
}
該程序使用 SAMV71J20B 的 PIOB 模塊讀取 GPIO 狀態,並使用 UART1 模塊將 GPIO 狀態輸出到串口。
程序中還使用了 PMC 模塊使能 PIOB 時鐘等。 |
|