我有一块STM324x9I-EVAL的开发板,当我想弄一个打印trace的信息的功能时,
使用ST提供的串口驱动的文件,但是没有成功,不知道是不是还有其他的什么
东西没有配置什么的,请大家帮忙看看。
我写的代码如下:
void TraceInit(void)
{
USART_InitTypeDef uartConfig;
USART_StructInit(&uartConfig);
uartConfig.USART_BaudRate = 115200;
USART_Init(USART1, &uartConfig);
}
void TracePrintf(char *format, ... )
{
char str_temp[256];
va_list vaotr;
int i, len;
va_start(vaotr, format);
vsprintf(str_temp, format, vaotr);
va_end(vaotr);
//h83029_sci1_UART_send_string(str_temp);
len = strlen(str_temp);
for (i = 0; i < len; i++) {
USART_SendData(USART1, str_temp);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
是的,我是刚用这个芯片,所以不是很熟啊。下午又看了一下,GPIO是需要配置的,
我配置了一下,但是串口还是没有输出信息,不知道还有什么问题,我用的是USART1
输出脚是PA9,我的GPIO的配置如下:
volatile unsigned int mask = 0;
mask = (~(3 << (18)));
GPIOA->MODER &= mask;
mask = (1 << (9*2));
GPIOA->MODER |= mask;
GPIOA->AFR[1] &= (~(15 << (1*4)));
GPIOA->AFR[1] |= ((7 << (1*4)));
不知道这个配置这个配置对了没有,明天再接着弄吧。
还有其他的要配置的东西吗。
与大家分享:
void COM1Init(u32 BaudRate) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = BaudRate;//波特率设置 USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); USART_ClearFlag(USART1, USART_FLAG_TC); }
void TracePrintfln(char *format, ... ) { char str_temp[256]; va_list vaotr; int i, len; va_start(vaotr, format); vsprintf(str_temp, format, vaotr); va_end(vaotr); //h83029_sci1_UART_send_string(str_temp); len = strlen(str_temp); for (i = 0; i < len; i++) { USART_SendData(USART1, str_temp); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); }
USART_SendData(USART1, ' '); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); }
使用的时候:
COM1Init(115200);
TracePrintfln("trace function ok!");
但是还有一个问题,我要打印的字符串的第一个字符丢失了,就是说,
上面语句打印出来的结果是 "race function ok!"。
不知道是怎么回事。
一周热门 更多>