求教STM32F103 RCC和GPIO遇到的一点问题

依然冷暖 2017-01-11 04:10:49
描述:目的是GPIOE2 GPIO3 两个按键控制GPIOC口的LED,
使用寄存器直接控制代码:
RCC->APB2ENR = 0x00000050;
GPIOE->CRL = 0x00088800;
GPIOE->ODR |= (0x07 << 2);
GPIOC->CRL |= 0x33333333;
打开E C 口的时钟 设置E 2 3 口为输入上拉 C口为推挽输出
使用库函数直接控制代码:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStructure);
我遇到的问题是 当寄存器和库函数混合使用时候出现的问题代码如下:
RCC->APB2ENR = 0x00000050;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStructure);
也就是使用库函数设置IO口状态 使用寄存器打开对应时钟 通过调试模式观察没发现不同 但是 实际出现的问题是 混合使用的时候LED会出现拖尾灯效果 也就是分别单独使用时候都没问题 但是在一起就出现LED灯出现拖尾效果


我要问的就是难道RCC->APB2ENR = 0x00000050;和
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
有区别么 为什么会不一样呢!
...全文
614 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
john_liqinghan 2017-01-29
  • 打赏
  • 举报
回复
RCC->APB2ENR = 0x00000050;这里应该不对,在怎么样也不能样子做!RCC->APB2ENR |= 0x00000050;才对
qq_37389308 2017-01-21
  • 打赏
  • 举报
回复
看下时钟那库函数的定义么,和寄存器有啥不不同
依然冷暖 2017-01-11
  • 打赏
  • 举报
回复
示波器观察当用寄存器使能io口时钟 再调用库函数设置io口状态 运行程序点击按键时 发现输出的io口产生波形不稳定的几百K波形 都不知道哪来的
依然冷暖 2017-01-11
  • 打赏
  • 举报
回复
其实问题就是用库函数打开对应硬件时钟 和用寄存器打开对应硬件时钟 运行现象居然不一样 为什么呢

27,510

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧