我的颈 发表于 2015-12-22 10:40:13

【NUCLEO-F410RB开发】+串口之我见

本帖最后由 我的颈 于 2015-12-26 10:11 编辑

求大婶 帮忙---解决这个问题??????STM32F410RB NUCLEO 时钟为什么会很准????
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=604674&fromuid=3231136
(出处: 意法半导体STM32/STM8技术社区)





我又来发帖了,哈哈!!
上次是RCC,不是很详细.
这次是USART配置,尽量的详细些,(遇到个自认为大问题.)
新手发帖多多关照!
好了开始.寄存器版本
开发环境: KEIL MDK 5.16a
板子    : STM32F410 NUCLEO

1.    1首先是串口GPIO配置
因为USART2使用的PA2,PA3,所以呢先打开AHB的GPIOA时钟,
然后是GPIO模式设置都设置为复用模式(MODE=10)(二进制)

接是着GPIO速度设置我们选择 HIGH Speed(OSPEEDR=10)

接下来GPIO上拉设置我们选择Pull-up(PUPDR=01)

最后是GPIO复用,首先看下F410 datasheet的引脚复用我们看到 PA2 PA3 在AF7 (TX,RX设置相同)

所以呢我们设置GPIO复用AF7(AFRL=0111)

好的GPIO就设置好了.我们需要记住的是流程,具体为甚?
我也不知道.我就知道这么用.新手懂得不多!!


2.   2 然后是USART配置,这个好说
只需要配置USART2_CR1寄存器的四项(因人而异)
       USART2_CR的第5位 接收缓存非空
       USART2_CR的第3位 TX使能
       USART2_CR的第2位 RX使能
       USART2_CR的第13位 USART使能


       然后是USART_BBR波特率设置


       有公式带进去 一元一次方程解得27.126
       DIV_Mantissa放整数 取27
DIV_Fraction         放小数 取13


然后是中断处理函数了
放代码
void USART2_IRQHandler(void)
{
      if(USART2->SR&(1<<5))//?????      //是否接收中断
      {      
                USART2->DR=USART2->DR;                //接收在发送
      }         
}


void USART2_Init(void)
{
      RCC->AHB1ENR                |=1<<0;                //GPIOA 时钟
      
      GPIOA->MODER                |=2<<4;                //PA2复用模式
      GPIOA->MODER                |=2<<6;                //PA3复用模式
      GPIOA->OSPEEDR      |=2<<4;                //IO速度
      GPIOA->OSPEEDR      |=2<<6;                //IO速度
      GPIOA->PUPDR                |=1<<4;                //上拉
      GPIOA->PUPDR                |=1<<6;                //上拉
      GPIOA->AFR                |=7<<12;                //复用AF7 RX
      GPIOA->AFR                |=7<<8;                //复用AF7 TX
      USART2->SR                        &=~(1<<5);      //清除接收中断
      RCC->APB1ENR                |=1<<17;                //USART2时钟
      USART2->BRR                |=27<<4;                //波特率
      USART2->BRR                |=13<<0;                //小数位
      USART2->CR1                |=1<<5;                //开启接收中断
      USART2->CR1                |=1<<3;                //接收使能
      USART2->CR1                |=1<<2;                //发送使能
      USART2->CR1                |=1<<13;                //USART 使能
      NVIC_Init(2,3,3,USART2_IRQn);      //中断优先级
}





3然后是调试了遇到了问题(只怪我太马虎)
看下这个引脚的图片 , NUCLEO ,PA2 PA3 复用TX,RX



主函数里一直发送数据,然后用分析仪抓取,什么都抓不到,

有问题?好从头分析,使用STM32F410RBNUCLEO自带的STlink
一步步的调试,看寄存器,我靠设置没问题还是不行!!!!!
用官方库函数的,还是抓不到我靠哪的问题?????

然后一步步调试,看寄存器的值,还是不行.真是日了X了.
………………………………………………………………
用STM32F410RB NUCLEO 虚拟串口试试?



OK!能接受到!!!!.就是抓不到数据,
测试下自己的程序吧!!
我去从虚拟串口也能看到.卧槽但是还是抓不到数据

测试下这个引脚

我去可以有数据

等等!我好想忽略了什么

用万用表测试一下,问题找到了

原来是这样,原理图的SB63的0欧电阻没有焊,所以PA2 PA3 就是NC:sleepy:
板子介绍的文档也没看才导致这个问题,抓抓不到TX数据:'(
原理图看的还是少 不知道那个代表什么意思 :L
(可能是我没仔细看文档)

好了就到这里了.一起交流827230081如有不足欢迎指出
新人发帖!多多关照!
谢谢
附件代码



沐紫 发表于 2015-12-22 10:52:42

感谢楼主分享!!

楼主截图的时候,qq截图那一排按钮,有图形文字功能,这样会比用鼠标写较好看

我的颈 发表于 2015-12-22 11:11:04

沐紫 发表于 2015-12-22 10:52
感谢楼主分享!!

楼主截图的时候,qq截图那一排按钮,有图形文字功能,这样会比用鼠标写较好看 ...

好的谢谢:)
1



limale 发表于 2015-12-22 11:57:28

不错,不错,赞一个。

Paderboy 发表于 2015-12-22 13:12:12

:loveliness:多谢分享。。

沐紫 发表于 2015-12-22 13:13:02

我的颈 发表于 2015-12-22 11:11
好的谢谢

太丑啦;P

dsjsjf 发表于 2015-12-22 15:32:08

感谢分享

huaiqiao 发表于 2015-12-24 09:03:56

SB63/62这些应该是跳线,方便调试用的应该。

我的颈 发表于 2015-12-24 09:45:32

huaiqiao 发表于 2015-12-24 09:03
SB63/62这些应该是跳线,方便调试用的应该。

这调试起来,不是很方便,还要烙铁什么的

Dylan疾风闪电 发表于 2015-12-24 10:14:05

支持下子!(自己不会写,所以只能做回帖众了。。)

跟随STM32FX的这些年来的心得:
1、动手前看原理图以及实物对照,很重要。(盲目去做会做无用功)
2、STM32F系列的外设寄存器变化不是很大,CM3、CM0只有部分寄存器的位有增减。(个人感觉看中文版的手册比较舒心,E文的手册基本是拿来当勘误用的,避免中文版翻译有遗漏。:))
3、个人习惯:初始化函数一般不直接操作寄存器,毕竟初始化只发生有限的次数,不必为了那点时间来降低可移植性(指STM32F系列之间的移植)。在主循环和中断处理,一般是会直接寄存器操作,以优化代码。
(个人愚见,欢迎评论!)
页: [1] 2
查看完整版本: 【NUCLEO-F410RB开发】+串口之我见