C++ SAM4SxPLAINED上的UART

C++ SAM4SxPLAINED上的UART,c++,signals,uart,atmel,C++,Signals,Uart,Atmel,SAM4SxPLAINED上的UART 你好, 我有一个(几乎)有效的程序 这些角色被传送了,但它们仍然不是人们所希望的。 谁能纠正 谢谢你所做的一切 你好 Voici le代码: #include "sam.h" // Fréquence d'horloge #define MCLK CHIP_FREQ_MAINCK_RC_4MHZ // Configure UART #define BAUD 115200 #define PARITY UART_MR_PAR_NO //#defi

SAM4SxPLAINED上的UART

你好,

我有一个(几乎)有效的程序

这些角色被传送了,但它们仍然不是人们所希望的。 谁能纠正

谢谢你所做的一切

你好

Voici le代码:

#include "sam.h"

// Fréquence d'horloge
#define MCLK CHIP_FREQ_MAINCK_RC_4MHZ

// Configure UART
#define BAUD    115200
#define PARITY  UART_MR_PAR_NO
//#define PARITY UART_MR_PAR_EVEN

// Définitions pour PA9 comme RX_UART0 et PA10 comme TX_UART0 (Périphérique A).
#define RXTX_PIO PIOA
#define RX_PIN PIO_PA9
#define TX_PIN PIO_PA10
#define UART UART0
#define UART_PID ID_UART0
#define RXTX_IRQn PIOA_IRQn
#define UART_IRQn UART0_IRQn

//prototype pour les fonctions. On ne veut pas faire un .h pour ça !
void hardware_init( void ) ;

void hardware_init( void )
{
    //pour utiliser RX_UART et TX_UART.
    PMC->PMC_PCER0 = (1 << UART_PID) ;
    RXTX_PIO->PIO_IDR |= RX_PIN | TX_PIN ;
    // Sélectionne le périphérique A
    RXTX_PIO->PIO_ABCDSR[0] &= ~(RX_PIN | TX_PIN) ;
    RXTX_PIO->PIO_ABCDSR[1] &= ~(RX_PIN | TX_PIN) ;
    RXTX_PIO->PIO_PDR       = (RX_PIN | TX_PIN) ;
    //Configure UART
    UART->UART_BRGR= MCLK / (BAUD * 16) ;
    UART->UART_CR = UART_CR_TXEN | UART_CR_RXEN ;
    UART->UART_IER = UART_IER_RXRDY ;
    // Active les interruptions sur UART;
    NVIC_EnableIRQ( UART_IRQn ) ;
    // Configure Systick pour un déclenchement chaque milliseconde
    SysTick_Config( SystemCoreClock/1000UL ) ;
    NVIC_EnableIRQ( SysTick_IRQn ) ;
}

// Variable globale pour compter les tics
static uint32_t ul_tickcount=0 ;

// Variable globale pour UART_Handler
static int32_t tr ;
static uint32_t j = 0 ;

static char chaine[] = "Bonjour UART0 " ;
static uint8_t nb_car = 14 ; //nombre de caractères de chaine

void SysTick_Handler( void )
{
    ul_tickcount++ ;
    // envoie un caractère toutes les secondes (ie 1000ms)
    if ( ul_tickcount == 1000)
    {
        if (j == nb_car)
        {
            j=0;
        }
        while(!(UART->UART_SR & UART_SR_TXRDY)) ;
        UART->UART_THR = chaine[j] ;
        j++ ;
        ul_tickcount = 0 ;
    }
}

void UART0_Handler( void )
{
     if (UART->UART_SR & UART_SR_RXRDY)
     {
          tr = UART->UART_RHR ;
          while(!(UART->UART_SR & UART_SR_TXRDY));
          UART->UART_THR = tr - 1 ;
     }
}

int main (void)
{
     hardware_init() ;
     while ( 1 )
     {
     }
}
#包括“sam.h”
//钟表顺序
#定义MCLK芯片\u频率\u主控\u RC\u 4MHZ
//配置UART
#定义波特率115200
#定义奇偶校验UART\U MR\U PAR\U NO
//#定义奇偶校验UART\u MR\u PAR\u偶数
//对PA9通信接收和PA10通信发送的定义(Périphérique A)。
#定义RXTX_PIO PIOA
#定义RX_引脚PIO_PA9
#定义TX_引脚PIO_PA10
#定义UART UART0
#定义UART\u PID ID\u UART0
#定义RXTX_IRQn PIOA_IRQn
#定义UART_IRQn UART0_IRQn
//原型机倒咖啡。在一个美丽的世界里!
无效硬件初始化(无效);
无效硬件初始化(无效)
{
//倾倒利用器RX_UART和TX_UART。
PMC->PMC|PCER0=(1个PIO|U IDR |=RX|U引脚| TX|U引脚;
//佩里佩里克酒店
RXTX_PIO->PIO_ABCDSR[0]&=~(RX_引脚| TX_引脚);
RXTX_PIO->PIO_ABCDSR[1]&=~(RX_引脚| TX_引脚);
RXTX_PIO->PIO_PDR=(RX_引脚| TX_引脚);
//配置UART
UART->UART_BRGR=MCLK/(波特率*16);
UART->UART\u CR=UART\u CR\u TXEN | UART\u CR\u RXEN;
UART->UART\u IER=UART\u IER\u RXRDY;
//UART上的主动les中断;
NVIC_EnableIRQ(UART_IRQn);
//配置Systick PUR un déCLENCHENCE chaque毫秒
系统时钟配置(系统时钟/1000UL);
NVIC_EnableIRQ(SysTick_IRQn);
}
//可变全局浇注计算机
静态uint32_t ul_tickcount=0;
//变量globale-pour-UART\u处理程序
静态int32_t tr;
静态uint32_t j=0;
静态字符链[]=“你好,UART0”;
静态uint8_t nb_car=14;//nombre de caractères de chaine
void SysTick_处理器(void)
{
ul_tickcount++;
//第二次会议(即1000毫秒)
如果(ul_tickcount==1000)
{
如果(j==nb_车)
{
j=0;
}
而(!(UART->UART_SR&UART_SR_TXRDY));
UART->UART_THR=chaine[j];
j++;
ul_tickcount=0;
}
}
无效UART0_处理器(无效)
{
如果(UART->UART\U SR和UART\U SR\U RXRDY)
{
tr=UART->UART\U RHR;
而(!(UART->UART_SR&UART_SR_TXRDY));
UART->UART_THR=tr-1;
}
}
内部主(空)
{
硬件初始化();
而(1)
{
}
}

您是否正确地将波特率与输出终端同步?是的。我在Atmel Studio 6.2或Tera术语中使用了“windows终端”,结果相同。您定义了
波特率和
奇偶校验率,但我无法确定您实际使用它初始化UART的位置。UART->UART\u BRGR=MCLK/(波特率*16);而且,如果我加上UART->UARTõu MR=PARITY,那就更糟糕了:Boîjoõr UAÒT0 Boîjor UART0 Boîjour UART0 Boîjour UART0 BoÒjour UART0 Bo jour UART0 Boîjour UART0 Boîjour UART0是输出的一个样本。一个好的对许多人都是错的。