首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Atmel SAM4S Xplained

Atmel SAM4S Xplained
EN

Stack Overflow用户
提问于 2013-01-11 14:21:08
回答 3查看 10.8K关注 0票数 4

我有一个SAM4s Xpl所得,我想使用UART1,但找不到示例或帮助。我自己试过了,但不起作用。

到目前为止,我的代码如下:

conf_uart.h

代码语言:javascript
复制
#include "asf.h" //uart.h etc. included here
#include <sam4s_xplained.h>

#define UART_SERIAL_BAUDRATE        9600
#define UART_SERIAL_CHANNEL_MODE   UART_MR_CHMODE_AUTOMATIC //UART_MR_CHMODE_NORMAL
#define UART_SERIAL_MCK            240000000UL //CHIP_FREQ_CPU_MAX (tired both!)
#define UART_SERIAL_MODE         UART_MR_PAR_NO

void uart_custom_init(void);

conf_uart.c

代码语言:javascript
复制
#include "conf_uart.h"

uint8_t received_byte;

void uart_custom_init(void) {
    sysclk_init();

    const sam_uart_opt_t uart_console_settings = {
       UART_SERIAL_BAUDRATE,
       UART_SERIAL_CHANNEL_MODE,
       UART_SERIAL_MCK,
       UART_SERIAL_MODE
    };

    uart_init(UART1,&uart_console_settings);      //Init UART1

    uart_enable_rx(UART1);                     //Enable RX (receiving)
    uart_enable_tx(UART1);                     //Enable TX (transmitting)
    uart_enable(UART1);                     //Enable UART1

    uart_enable_interrupt(UART1,UART_IER_RXRDY);   //Interrupt reading ready
    NVIC_EnableIRQ(UART1_IRQn);

}

void UART1_Handler() {
   uint32_t dw_status = uart_get_status(UART1);

   if(dw_status & UART_SR_RXRDY) {
      uint8_t received_byte;
      uart_read(UART1, &received_byte);
      uart_write(UART1, received_byte);
   }
}

我尝试过不同的东西。例如,我激活了自动回波,但在我的计算机上没有收到任何信息,在我的SAM4s上也没有收到任何信息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-17 17:05:39

这是我的工作代码:脱机

conf_uart.h

代码语言:javascript
复制
#include "asf.h" //uart.h etc. included here

#define UART_SERIAL_BAUDRATE        9600
#define UART_SERIAL_CHANNEL_MODE   UART_MR_CHMODE_NORMAL
#define UART_SERIAL_MODE         UART_MR_PAR_NO

/* =============== UART1 =============== */ //(UART0 is defined but not UART1)
#define PINS_UART1          (PIO_PB2A_URXD1 | PIO_PB3A_UTXD1)
#define PINS_UART1_FLAGS    (PIO_PERIPH_A | PIO_DEFAULT)
#define PINS_UART1_MASK     (PIO_PB2A_URXD1 | PIO_PB3A_UTXD1)
#define PINS_UART1_PIO      PIOB
#define PINS_UART1_ID       ID_PIOB
#define PINS_UART1_TYPE     PIO_PERIPH_A
#define PINS_UART1_ATTR     PIO_DEFAULT

void uart_custom_init(void);
void sendViaUart(uint8_t data);

conf_uart.cpp

代码语言:javascript
复制
#include "conf_uart.h"

void uart_custom_init(void) {
    sysclk_init();

     // set the pins to use the uart peripheral
    pio_configure(PINS_UART1_PIO, PINS_UART1_TYPE, PINS_UART1_MASK, PINS_UART1_ATTR);

    //enable the uart peripherial clock
    pmc_enable_periph_clk(ID_UART1);

    const sam_uart_opt_t uart1_settings =
      { sysclk_get_cpu_hz(), UART_SERIAL_BAUDRATE, UART_SERIAL_MODE };

    uart_init(UART1,&uart1_settings);      //Init UART1 and enable Rx and Tx

    uart_enable_interrupt(UART1,UART_IER_RXRDY);   //Interrupt reading ready
    NVIC_EnableIRQ(UART1_IRQn);

}

void sendViaUart(uint8_t data) {
   while (!(UART1->UART_SR & UART_SR_TXRDY));
   uart_write(UART1, data);
}

void UART1_Handler() {
   uint32_t dw_status = uart_get_status(UART1);

   if(dw_status & UART_SR_RXRDY) {
      uint8_t received_byte;
      uart_read(UART1, &received_byte);
      sendViaUart(received_byte);
   }
}

向利奥问好

  • 封闭-
票数 7
EN

Stack Overflow用户

发布于 2014-09-21 21:12:29

问题是UART在这个板上,Sam4S解释说Pro没有映射到PB2A和PB3A。UART映射到PB2A和PA22A。我花了很长时间才弄明白这一点,因为这在文档中是错误的。

票数 1
EN

Stack Overflow用户

发布于 2014-06-02 21:22:37

您可能还喜欢这个页面:它包含了SAM4S uart的设置和许多其他示例。ASF源代码文档 --它使用USART0,我知道你想使用USART1。但仍然是一个很好的参考。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14280053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档