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]