求STM32F439芯片的串口打印信息程序

2019-07-21 05:13发布

我有一块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); } }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
745021926
1楼-- · 2019-07-21 07:25
代码不全?串口初始化差很多啊
fzhYou
2楼-- · 2019-07-21 09:44
回复【2楼】745021926:
---------------------------------
是的,我是刚用这个芯片,所以不是很熟啊。下午又看了一下,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)));

不知道这个配置这个配置对了没有,明天再接着弄吧。
还有其他的要配置的东西吗。
745021926
3楼-- · 2019-07-21 10:56
还有USART时钟初始化,停止位,校验位等,你先看下论坛里原子哥的例程吧,再对照着改成F439的
正点原子
4楼-- · 2019-07-21 11:01
用407的例程,应该可以直接使用.
fzhYou
5楼-- · 2019-07-21 13:29
 精彩回答 2  元偷偷看……
fzhYou
6楼-- · 2019-07-21 14:52
找到了407的例程了,串口可以打印数据了,把我的结果代码贴出来
与大家分享:

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!"。
不知道是怎么回事。







一周热门 更多>