Hello, my code works with UART3 and I just want to add UART1 to my code and I use the same piece of code for initializing UART1 that I used for UART3, however I faced this error: #167: argument of type "LPC_UART1_TypeDef *" is incompatible with parameter of type "LPC_UART_TypeDef *".
I was wondering if you help me resolve this issue.
Thanks in advance,
Alex
Here is the part of the code I used:
uartPinSel.Funcnum=PINSEL_FUNC_2;
uartPinSel.OpenDrain=PINSEL_PINMODE_NORMAL;
uartPinSel.Pinmode=PINSEL_PINMODE_TRISTATE;
uartPinSel.Pinnum=0;
uartPinSel.Portnum=0;
PINSEL_ConfigPin(&uartPinSel);
uartPinSel.Pinnum=1;
PINSEL_ConfigPin(&uartPinSel);
uartConfig.Baud_rate=115200;
uartConfig.Databits=UART_DATABIT_8;
uartConfig.Parity=UART_PARITY_NONE;
uartConfig.Stopbits=UART_STOPBIT_1;
UART_Init(LPC_UART3,&uartConfig);
UART_TxCmd(LPC_UART3,ENABLE);
UART_IntConfig(LPC_UART3,UART_INTCFG_RBR,ENABLE);
NVIC_EnableIRQ(UART3_IRQn);
uartPinSel.Funcnum=PINSEL_FUNC_2;
uartPinSel.OpenDrain=PINSEL_PINMODE_NORMAL;
uartPinSel.Pinmode=PINSEL_PINMODE_TRISTATE;
uartPinSel.Pinnum=0;
uartPinSel.Portnum=2;
PINSEL_ConfigPin(&uartPinSel);
uartPinSel.Pinnum=1;
PINSEL_ConfigPin(&uartPinSel);
uartConfig.Baud_rate=38400;
uartConfig.Databits=UART_DATABIT_8;
uartConfig.Parity=UART_PARITY_NONE;
uartConfig.Stopbits=UART_STOPBIT_1;
UART_Init(LPC_UART1,&uartConfig);
UART_TxCmd(LPC_UART1,ENABLE);
已解决! 转到解答。
Yeah, Alex, it looks like you need a cast to (LPC_UART_TypeDef) on lines 165 and 166:
UART_Init( (LPC_UART_TypeDef *)LPC_UART1,&uartConfig);
UART_TxCmd( (LPC_UART_TypeDef *)LPC_UART1,ENABLE);
For some reason, in whatever version of the tool you're using, uart1 is treated differently than the other uarts. You can see it here, on line 221 of lpc17xx_uart.c that you included:
if(((LPC_UART1_TypeDef *)UARTx) == LPC_UART1)
All the other instances of uart default to LPC_UART_TypeDef. Make those typecasts, above, and it *should* work. You'll need to typecast LPC_UART1 every time you use it, I'd imagine.
Yeah, Alex, it looks like you need a cast to (LPC_UART_TypeDef) on lines 165 and 166:
UART_Init( (LPC_UART_TypeDef *)LPC_UART1,&uartConfig);
UART_TxCmd( (LPC_UART_TypeDef *)LPC_UART1,ENABLE);
For some reason, in whatever version of the tool you're using, uart1 is treated differently than the other uarts. You can see it here, on line 221 of lpc17xx_uart.c that you included:
if(((LPC_UART1_TypeDef *)UARTx) == LPC_UART1)
All the other instances of uart default to LPC_UART_TypeDef. Make those typecasts, above, and it *should* work. You'll need to typecast LPC_UART1 every time you use it, I'd imagine.
> error: #167: argument of type "LPC_UART1_TypeDef *" is incompatible with parameter of type "LPC_UART_TypeDef *"
These are different types, it seems. I suppose a type cast should work, but I would check before what the differences are.
Two things:
1. LPC_UART1 should translate to a memory address, like this - but different in your case since this is for a FRDM66F and the memory locations are likely not the same:
/** Peripheral UART1 base address */
#define UART1_BASE (0x4006B000u)
/** Peripheral UART1 base pointer */
#define UART1 ((UART_Type *)UART1_BASE)
Make sure LPC_UART3 and LPC_UART1 resolve to addresses somewhat like that.
2. You should use separate "config" variables for the different peripherals, even if they're of the same UART type. So create "uartConfig3" and a "uartConfig1" variables and pass those in respectively. The memory locations are used in the background, and having one variable used for two instances could lead to confusion in data handling.
@aaronminner Here uartConfig is declared. Though I uploaded the c file so that you can take a look at the code better if there's something that I'm missing here.
PINSEL_CFG_Type adcpinsel;
PINSEL_CFG_Type uartPinSel;
UART_CFG_Type uartConfig;