OpenEdv-开源电子网

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

根据原子STM32F407的USART1修改成STM32F429的UART5无法实现通讯,还请指点以下初始化是否有错!

[复制链接]

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2012-7-20
在线时间
15 小时
发表于 2015-8-20 00:41:01 | 显示全部楼层 |阅读模式
5金钱
void uart5_init(u32 pclk2,u32 bound)



float temp;
u16 mantissa;
u16 fraction;   
temp=(float)(pclk2*1000000)/(bound*16);//????USARTDIV@OVER8=0
mantissa=temp; //??????????·?
fraction=(temp-mantissa)*16; //??????????·?@OVER8=0 
    mantissa<<=4;
mantissa+=fraction; 
RCC->AHB1ENR|=(1<<2)|(1<<3);   //????PORTC\PORTD???±??  
RCC->AHB1ENR|=1<<20;   //?????®??UART5?±?? 
// GPIO_Set(GPIOB,PIN6|PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,????????,????????
GPIO_Set(GPIOC,PIN12,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PC12????????,????????
GPIO_Set(GPIOD,PIN2,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU); //PD2????????,????????

  GPIO_AF_Set(GPIOC,12,8); //PC12
GPIO_AF_Set(GPIOD,2,8); //PD2   
//?¨?????è??
  UART5->BRR=mantissa; //?¨?????è??  
UART5->CR1&=~(1<<15); //?è??OVER8=0   
UART5->CR1|=1<<3;   //?®??·??????? 
#if EN_UART5_RX   //??????????????
//???????????? 
UART5->CR1|=1<<2;   //?®??????????
UART5->CR1|=1<<5;     //??????????·???????????    
MY_NVIC_Init(3,3,UART5_IRQn,2);//×é2??×????????? 
#endif
UART5->CR1|=1<<13;   //?®??????
}
//===============================================
void Uart5_putch(u8 k) 
{
if(k == '\n')
{
//????·?????×???????UART2??·?????????
UART5->DR = k;
//????·????ê??
  while (!(UART5->SR & USART_FLAG_TXE));
}
else
{
UART5->DR = k;
while (!(UART5->SR & USART_FLAG_TXE));
}
}



USART1已经能够正常使用,只是UART5找不到是哪里出问题了!还请原子指点

最佳答案

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

回复【2楼】正点原子: --------------------------------- 该问题已经解决了,还是谢谢原子哥帮顶,附上初始化代码 void uart5(int baud) {     GPIO_InitTypeDef GPIO_InitStructure;     USART_InitTypeDef USART_InitStructure;     NVIC_InitTypeDef NVIC_InitStructure;          RCC_AHB1Pe ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2012-7-20
在线时间
15 小时
 楼主| 发表于 2015-8-20 00:41:02 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
该问题已经解决了,还是谢谢原子哥帮顶,附上初始化代码
void uart5(int baud)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE);
    

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType=GPIO_OType_OD;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
    GPIO_Init(GPIOC,&GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
    GPIO_Init(GPIOD,&GPIO_InitStructure);
       
    GPIO_PinAFConfig(GPIOC,GPIO_PinSource12,GPIO_AF_UART5);
    GPIO_PinAFConfig(GPIOD,GPIO_PinSource2,GPIO_AF_UART5);
        
    USART_DeInit(UART5);
        
    USART_InitStructure.USART_BaudRate=baud;
    USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
    USART_InitStructure.USART_WordLength=USART_WordLength_8b;
    USART_InitStructure.USART_Parity=USART_Parity_No;
    USART_InitStructure.USART_StopBits=USART_StopBits_1;
    USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
    USART_Init(UART5,&USART_InitStructure);
    
     NVIC_InitStructure.NVIC_IRQChannel=UART5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    
    USART_ITConfig(UART5,USART_IT_RXNE,ENABLE);
    USART_Cmd(UART5,ENABLE);

}

在main函数中的调用是: uart5(28800); //波特率= 9600      使用的是JTAG去检验波特率,发现UART5的波特率时钟要设置为28800  才能匹配到9600的波特率!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-8-21 23:36:42 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-8-27 23:55:22 | 显示全部楼层
回复【3楼】碧海航歆:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2013-4-14
在线时间
24 小时
发表于 2015-12-26 00:27:12 | 显示全部楼层
楼主,能不能麻烦详细说下是什么问题?我最近也遇到这个问题了,你1L用的是寄存器的代码,2L用的库函数,没看出差别出在哪
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 21:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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