OpenEdv-开源电子网

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

STM32F407寄存器版问题两个

[复制链接]

30

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2017-5-1
在线时间
63 小时
发表于 2018-1-21 19:28:50 | 显示全部楼层 |阅读模式
1金钱
用《精通》一书中的串口通信例程中的代码,程序没有问题,运行良好。
无标题.jpg

第一个问题:
使用书中例程中的 uart_init()初始化函数,配自己写的串口通信子函数,运行后,每次发送,通过串口调试软件发现,接收到的字符不是发送的
无标题2.jpg

且每次发送后,接收到的内容都不一样
无标题1.jpg

自己编写的串口通信子函数在下面一并贴出.
第二个问题
用直接给寄存器置数的方法编写的初始化函数和自己编写的串口通信子函数,结果是程序不收发串口数据。
下面是代码:
//采用移位的方式设置,使用头文件stm32f4xx.h
/*
//使能时钟
RCC->AHB1ENR|=1<<0;          //使能PA口时钟
RCC->APB2ENR|=1<<4;          //使能串口1时钟
       
//设置PA9
GPIOA->MODER&=~(3<<2*9);      //模式清零
GPIOA->MODER|=2<<(2*9);       //设置模式值10为复用
GPIOA->OSPEEDR&=~(3<<2*9);    //速度,清零
GPIOA->OSPEEDR|=2<<(2*9);           //速度50M
GPIOA->OTYPER&=~(1<<9);      //输出模式,清零
GPIOA->OTYPER|=0<<9;          //推挽输出
GPIOA->PUPDR&=~(3<<(2*9));   //上下拉,清零
GPIOA->PUPDR|=1<<(2*9);      //值 01,上拉
GPIOA->AFR[1]&=~(15<<(4*1)); //复用寄存器设置,清零
GPIOA->AFR[1]|=(7<<(4*1));     //值 0111(AF7) ,PA9口,复用为串口1       
//设置PA10
GPIOA->MODER&=~(3<<(2*10));  //设置PA10,模式清零
GPIOA->MODER|=2<<(2*9);      //模式值 10 为复用
GPIOA->OSPEEDR&=~(3<<(2*10));//速度,清零
GPIOA->OSPEEDR|=2<<(2*10);   //设置值 10 为50MHZ
GPIOA->PUPDR&=~(3<<(2*10));  //上下拉清零
GPIOA->PUPDR|=1<<(2*10);     //设置值01 为上拉
GPIOA->OTYPER&=~(1<<10);     //输出模式,清零
GPIOA->OTYPER|=0<<10;        //值 0 ,推挽输出
GPIOA->AFR[1]&=~(15<<(4*2)); //复用寄存器,清零
GPIOA->AFR[1]|=(7<<(4*2));   //复用寄存器,值AF7(0111),复用为串口1

USART1->BRR|=0x2d9;              //串口1波特率设置为11520,该寄存器置数,只能直接写值,不能用移位方式
USART1->CR1&=~(1<<15);        //设置OVER8位置 0
USART1->CR1&=~(1<<13);        //UE位清零
USART1->CR1|=1<<13;           //UE位设置为1,串口1使能
USART1->CR1&=~(1<<12);        //M位 置 0,字长8位


void Usart_UsartData(void)    //自己编写的串口收发数据子函数
{
  u8 Usart_set;
  if(USART1->SR&(1<<5))
{
  Usart_set=USART1->DR;        //接收到的数据保存到Usart_set中
  USART1->DR=Usart_set;           //把接收到的数据发送到PC
   while((USART1->SR&0x40)==0);
         
}

}


什么原因,代码那里有问题。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-22 01:17:09 | 显示全部楼层
有仿真器么?这种问题,仿真很容易解决。仿真跟踪下即可
回复

使用道具 举报

30

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2017-5-1
在线时间
63 小时
 楼主| 发表于 2018-1-23 19:27:21 | 显示全部楼层
正点原子 发表于 2018-1-22 01:17
有仿真器么?这种问题,仿真很容易解决。仿真跟踪下即可

谢谢原子老师,我的ST-LINK/V2有问题了,暂时无法仿真。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-24 00:38:45 | 显示全部楼层
BA2BA 发表于 2018-1-23 19:27
谢谢原子老师,我的ST-LINK/V2有问题了,暂时无法仿真。

重新整一个
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

30

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2017-5-1
在线时间
63 小时
 楼主| 发表于 2018-1-24 19:04:58 | 显示全部楼层
本帖最后由 BA2BA 于 2018-1-24 20:39 编辑

正在想办法。不过,这里还有个问题,请教原子老师,我用的STM32F407最小核心板的JTAG接口和探索者板或网上查到的原理图有些差别,就是少了四只上,下拉电阻,不知这样情况下,SWD模式能否工作。 无标题.jpg
ST-LINK/V2接成SW模式,看设置,应该是读到了芯片信息,但就是不能下载,更谈不上仿真了
无标题2.jpg
这里显示出来了下载器的信息,但点击下载,就是不行。
无标题.jpg

无标题1.jpg
不知那里出问题,用串口下载没有问题。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-25 01:18:34 | 显示全部楼层
BA2BA 发表于 2018-1-24 19:04
正在想办法。不过,这里还有个问题,请教原子老师,我用的STM32F407最小核心板的JTAG接口和探索者板 ...

上拉/下拉电阻不接是可以的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

30

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2017-5-1
在线时间
63 小时
 楼主| 发表于 2018-1-25 18:25:07 | 显示全部楼层
正点原子 发表于 2018-1-25 01:18
上拉/下拉电阻不接是可以的。

看来,我需要买个新的下载器了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 00:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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