在引用头文件"utils/uartstdio.h"时一旦使用该头文件包含的函数时,CCS就会报错内容为
<Linking>
undefined first referenced
symbol in file
--------- ----------------
UARTprintf ./main.obj
error #10234-D: unresolved symbols remain
error #10010: errors encountered during linking; "SSI.out" not built
是不是工程配置有问题?
源代码如下|
#include<stdint.h>
#include<stdbool.h>
#include"inc/hw_memmap.h"
#include"driverlib/gpio.h"
#include"driverlib/pin_map.h"
#include"driverlib/ssi.h"
#include"driverlib/uart.h"
#include"driverlib/sysctl.h"
#include "utils/uartstdio.h"
#define NUM_SSI_DATA 3
//串口初始化函数
void InitConsole(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
//使用16MHZ内部时钟源作为串口时钟
UARTClockSourceSet(UART0_BASE,UART_CLOCK_PIOSC);
GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);
//串口号、波特率、时钟频率
UARTConfigSetExpClk(UART0_BASE,SysCtlClockGet(),115200,(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE));
}
int main(void)
{
uint32_t pui32DataTX[NUM_SSI_DATA];
uint32_t pui32DataRX[NUM_SSI_DATA];
uint32_t ui32Index;
SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
InitConsole();
//UARTprintf("ssi ->\n");
//UARTprintf("Mode:spi\n");
//UARTprintf("Data:8-bit\n\n");
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinConfigure(GPIO_PA2_SSI0CLK);
GPIOPinConfigure(GPIO_PA3_SSI0FSS);
GPIOPinConfigure(GPIO_PA4_SSI0RX);
GPIOPinConfigure(GPIO_PA5_SSI0TX);
GPIOPinTypeSSI(GPIO_PORTA_BASE,GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2);
//SSI0_BASE/时钟频率、时钟协议,moto代表SPI协议、工作模式:主机模式、位速率1M、数据帧位数为8
SSIConfigSetExpClk(SSI0_BASE,SysCtlClockGet(),SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER,1000000,8);
SSIEnable(SSI0_BASE);
while(SSIDataPutNonBlocking(SSI0_BASE,&pui32DataRX[0]));//确保RXFIFO中没有数据
pui32DataTX[0]='s';
pui32DataTX[1]='P';
pui32DataTX[2]='i';
UARTprintf("sent:\n");
for(ui32Index=0;ui32Index<NUM_SSI_DATA;ui32Index++)
{
//UARTprintf("'%C'",pui32DataTX[ui32Index]);
SSIDataPut(SSI0_BASE,pui32DataTX[ui32Index]);
}
//等待SSI0将所有数据发送到FIFO中
while(SSIBusy(SSI0_BASE));
//UARTprintf("\nReceived:\n");
for(ui32Index=0;ui32Index<NUM_SSI_DATA;ui32Index++)
{
SSIDataGet(SSI0_BASE,&pui32DataRX[ui32Index]);
pui32DataRX[ui32Index]&=0x00FF;
//UARTprintf("'%C'",pui32DataRX[ui32Index]);
}
}