Estoy tratando de transmitir datos de ( FM4-176L-S6E2CC-ETH Kit de inicio ) para Arduino (Leonardo) mediante la comunicación UART. Conexiones de cable (FM4 [ pág. 8-9 ] - > Arduino):
P19 (SOT2_0) - > D10
P18 (SIN2_0) - > D11
Para programar FM4, uso Keil uVision5 (5.24.1) con PDL (2.1.0). He activado UART ch.2 en pdl_user.c
#define PDL_PERIPHERAL_ENABLE_MFS2 PDL_ON
e inicializó ambos pines FM4 (P18, P19) para la comunicación mediante una función SetPinFunc_XXX ()
#define SetPinFunc_SIN2_0(dummy) do{ \
bFM_GPIO_ADE_AN08=0u; \
PINRELOC_SET_EPFR( FM_GPIO->EPFR07, 16u, 2u, 1u ); \
bFM_GPIO_PFR1_P8 = 1u; \
}while (0u)
y
#define SetPinFunc_SOT2_0(dummy) do{ \
bFM_GPIO_ADE_AN09=0u; \
PINRELOC_SET_EPFR( FM_GPIO->EPFR07, 18u, 2u, 1u ); \
bFM_GPIO_PFR1_P9 = 1u; \
}while (0u)
Cuando subo el código en FM4 (sin errores de compilación), nada se ha transmitido a Arduino, incluso después de presionar el botón de reinicio. ¿Me estoy perdiendo algo?
Si cambio el canal UART a & UART0 y usa SOT0_0 y SIN0_0, puedo ver los datos transmitidos en la consola. También he probado Arduino con el módulo BT y Android, y funciona bien con el mismo código.
FM4-S6E2CC:
#include "mcu.h"
#include "pdl_header.h"
#define SAMPLE_UART_RX_BUFFSIZE sizeof(au8UartTxBuf)/sizeof(char)
volatile stc_mfsn_uart_t* UartCh2 = &UART2;
stc_mfs_uart_config_t stcUartConfig;
uint8_t u8Cnt = 0;
static uint8_t au8UartTxBuf[] = "Data sent from UART2!";
void InitUart(void)
{
PDL_ZERO_STRUCT(stcUartConfig);
/* Initialize UART TX and RX channel */
stcUartConfig.enMode = UartNormal;
stcUartConfig.u32BaudRate = 9600;
stcUartConfig.enDataLength = UartEightBits;
stcUartConfig.enParity = UartParityNone;
stcUartConfig.enStopBit = UartOneStopBit;
stcUartConfig.enBitDirection = UartDataLsbFirst;
stcUartConfig.bInvertData = FALSE;
stcUartConfig.bHwFlow = FALSE;
stcUartConfig.bUseExtClk = FALSE;
stcUartConfig.pstcFifoConfig = NULL;
Mfs_Uart_Init(UartCh2, &stcUartConfig);
}
int main(void)
{
/* Initialize UART function I/O */
SetPinFunc_SIN2_0();
SetPinFunc_SOT2_0();
/* UART initialization */
InitUart();
/* Enable TX function of UART2 */
Mfs_Uart_EnableFunc(UartCh2, UartTx);
while(u8Cnt < SAMPLE_UART_RX_BUFFSIZE)
{
while (TRUE != Mfs_Uart_GetStatus(UartCh2, UartTxEmpty)); /* wait until TX buffer empty */
Mfs_Uart_SendData(UartCh2, au8UartTxBuf[u8Cnt]);
u8Cnt++;
}
Mfs_Uart_DeInit(UartCh2, TRUE);
while(1)
{
/* Data is normally sent and received */
}
}
Leonardo Arduino:
#include <SoftwareSerial.h>
SoftwareSerial UART(10, 11);
// creates a "virtual" serial port/UART
// connect FM4 pin TX to D10
// connect FM4 pin RX to D11
void setup(){
UART.begin(9600); // set the data rate for the SoftwareSerial port
}
void loop(){
if (UART.available())
Serial.println(UART.read());
}