你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32初学笔记(四)GPIO端口操作与仿真

[复制链接]
STMCU小助手 发布时间:2021-3-11 13:12
STM32初学笔记(四)GPIO端口操作与仿真
上篇文章中使用库函数实现一个简单的功能:读取GPIOA端口的高8位引脚的电平,对相应的低8位(0-8,1-9,...)进行置位1和复位0操作  使对应引脚电平相同。本篇文章通过操作端口寄存器实现这个功能,感受一下两种方法的差异。
本篇文章的主要内容:
1、代码实现
2、keil5软件仿真
1、代码实现
首先设置引脚的工作模式,然后通过if语句判断输入引脚电平,设置相应的输出。以第10行和第11行为例,在判断中,通过与运算判断出第8位为1还是0,逻辑与运算将其余位均置0;第8位为1则第0位通过逻辑或运算置1,不影响其他位的输出,第8位为0则通过取反后再进行逻辑与运算将第0位置0,不影响其他位的输出。
这两句基本的逻辑运算要熟练掌握。在开发一个嵌入式硬件系统时,经常需要对一些外围硬件的状态标志位进行判断并作相应处理,就可能会用到这些逻辑运算。
  1. int main(void)
  2. {
  3.   //1、GPIOA.0-GPIOA.7输出模式,GPIOA.8-GPIOA.15输入模式
  4.   //2、GPIOA.x = GPIOA.(x+8)
  5.   GPIOA->CRL = 0x33333333;
  6.   GPIOA->CRH = 0x44444444;

  7.   while (1)
  8.   {
  9.       if ((GPIOA->IDR & 0x0100) == 0x0100)   GPIOA->ODR = GPIOA->ODR | 0x01;
  10.       else                                   GPIOA->ODR = GPIOA->ODR & (~0x01);
  11.    
  12.     if ((GPIOA->IDR & 0x0200) == 0x0200)   GPIOA->ODR = GPIOA->ODR | 0x02;
  13.       else                                   GPIOA->ODR = GPIOA->ODR & (~0x02);
  14.    
  15.     if ((GPIOA->IDR & 0x0400) == 0x0400)   GPIOA->ODR = GPIOA->ODR | 0x04;
  16.       else                                   GPIOA->ODR = GPIOA->ODR & (~0x04);
  17.    
  18.     if ((GPIOA->IDR & 0x0800) == 0x0800)   GPIOA->ODR = GPIOA->ODR | 0x08;
  19.       else                                   GPIOA->ODR = GPIOA->ODR & (~0x08);
  20.    
  21.     if ((GPIOA->IDR & 0x1000) == 0x1000)   GPIOA->ODR = GPIOA->ODR | 0x10;
  22.       else                                   GPIOA->ODR = GPIOA->ODR & (~0x10);
  23.    
  24.     if ((GPIOA->IDR & 0x2000) == 0x2000)   GPIOA->ODR = GPIOA->ODR | 0x20;
  25.       else                                   GPIOA->ODR = GPIOA->ODR & (~0x20);
  26.    
  27.     if ((GPIOA->IDR & 0x4000) == 0x4000)   GPIOA->ODR = GPIOA->ODR | 0x40;
  28.       else                                   GPIOA->ODR = GPIOA->ODR & (~0x40);
  29.    
  30.     if ((GPIOA->IDR & 0x8000) == 0x8000)   GPIOA->ODR = GPIOA->ODR | 0x80;
  31.       else                                   GPIOA->ODR = GPIOA->ODR & (~0x80);   
  32.   }  
  33.   return 0;
  34. }
复制代码

2、keil5软件仿真
首先对项目进行编译(build或rebuild),如果编译没有错误,点击调试按钮进入调试状态。点击搜索按钮弹出搜索窗口可以搜索某个变量或函数的在那些位置使用,对于代码量较大的项目,可以设置断点进行调试,对于调试好的程序可以借助仿真器等将程序下载到单片机中。
3.1.png
进入调试状态后,选择Peripherals->General PurposeI/O->GPIOA打开监测窗口。在窗口中可以看到窗口的工作模式、寄存器值和引脚状态,这里高8位设置为输入状态,所以通过点击高8位对应的方格可以设置引脚电平,方格内出现“√”表示为高电平。
3.2.png
如果程序正确,在全速运行状态下,高8位电平和相应的低8位电平是是保持相同的。如果不正确就需要进行调试,在调试状态下会有调试工具栏,可以进行复位、全速运行、单步运行等。
3.3.png
文章出处: 机械智者

收藏 评论2 发布时间:2021-3-11 13:12

举报

2个回答
嗯呢 回答时间:2024-10-14 10:44:46

想问一下,我的General PurposeI/O->GPIOA监测窗口没有最下面的Pins是为什么

嗯呢 回答时间:2024-10-14 10:47:11

嗯呢 发表于 2024-10-14 10:44
想问一下,我的General PurposeI/O->GPIOA监测窗口没有最下面的Pins是为什么
...

我知道了,没有用软件仿真

所属标签

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版