OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7263|回复: 4

求助 F4的usart1不能用 数据发不出去

[复制链接]

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2014-7-31
在线时间
7 小时
发表于 2014-7-31 11:46:05 | 显示全部楼层 |阅读模式
5金钱
之前一直潜水学习 今天终于遇到问题 申请个号 我用开发板的usart3能正常收发数据 但是把板子上的程序改到usart1就不行 一直卡在这 while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}

最佳答案

查看完整内容[请看2#楼]

找到错误了 就是始终哪里弄错了 RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); 1跟2不能这样用
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2014-7-31
在线时间
7 小时
 楼主| 发表于 2014-7-31 11:46:06 | 显示全部楼层
找到错误了 就是始终哪里弄错了 RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); 1跟2不能这样用
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2014-7-31
在线时间
7 小时
 楼主| 发表于 2014-7-31 13:47:19 | 显示全部楼层
刚在审核 我现在贴下初始化其他代码

void uart_init(void)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_Init(GPIOA, &GPIO_InitStructure);


GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);


USART_InitStructure.USART_BaudRate   = 115200;
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_Tx | USART_Mode_Rx;

USART_Init(USART1, &USART_InitStructure);


USART_Cmd(USART1, ENABLE);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
}

void nvic_config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* NVIC configuration */
/* Configure the riority Group to 2 bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

/* Enable the USARTx Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2014-7-31
在线时间
7 小时
 楼主| 发表于 2014-7-31 13:48:21 | 显示全部楼层
int main(void)
{
nvic_config();
uart_init();

while(1)
{
    printf("hello!welcome to F4...\r\n ");
}
}

然后重定向print是这样的
int fputc(int ch, FILE *f)
{
/* lace your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(USART1, (uint8_t) ch);

/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}

//while(RESET == USART_GetFlagStatus(USART1,USART_FLAG_TXE));

return ch;
}
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2014-7-31
在线时间
7 小时
 楼主| 发表于 2014-7-31 13:50:17 | 显示全部楼层
不知道F4的usart1跟其他是不是不一样 我是完全按照usart3改的 但是单步调试时候一直停在while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}  还有个问题 USART_FLAG_TXE 跟USART_FLAG_TC是不是一样的 我网上看usart1是用USART_FLAG_TC标志 但是这里我改到USART_FLAG_TC之后 这句话是跳过去 但是还没打印出来数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 23:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表