STM32学习笔记(2)(基于正点原子)

学习目的:熟悉IO口配置,会使用位操作。了解两种开发方式的区别。

一、GPIO的基本原理和寄存器配置

1.STM32F103ZET6一共有7组IO口,每组IO口有16个IO。(GPIOA,GPIOB,…,GPIOG)。
STM32F103RCT6有4组IO口。(GPIOA0…A15,GPIOB0…B15,GPIOC0…C15,GPIOD0…D2)。

2.I/O端口位的基本结构。

在这里插入图片描述
3.GPIO的工作方式。
GPIO有4种输入模式(输入浮空、输入上拉、输入下拉、模拟输入)和4种输出模式(开漏输出、开漏复用功能、推挽式输出、推挽式复用功能)。
(1)输入浮空模式
在这里插入图片描述

(2)输入上拉模式
在这里插入图片描述
(3)输入下拉模式
在这里插入图片描述
(4)模拟输入
在这里插入图片描述

(5)开漏输出模式
在这里插入图片描述
(6)开漏复用输出模式
在这里插入图片描述
(7)推挽输出模式
在这里插入图片描述

(8)推挽复用输出模式
在这里插入图片描述
4.推挽输出与开漏输出
在这里插入图片描述

在这里插入图片描述

5.GPIO相关寄存器配置
在这里插入图片描述
在这里插入图片描述6.GPIOX_CRL(GPIOX_CRH)
在这里插入图片描述
7.GPIOX_IDR在这里插入图片描述
8.GPIOX_ODR在这里插入图片描述
在这里插入图片描述
9.GPIOX_BSRR
通过设置ODR寄存器间接设置输出
在改写电平的时候可以直接通过该寄存器改写要改的IO口的电平,不用分析其他IO口的电平情况。
在这里插入图片描述
10.GPIOX_BRR(功能与BSRR的高位相同)在这里插入图片描述
11.端口复用在这里插入图片描述12.端口重映射
在这里插入图片描述

二、跑马灯实验–库函数

1.重要函数
在这里插入图片描述
2.SetBits为高电平,ResetBits为低电平

3.初始化函数GPIO_Init
在这里插入图片描述

Mode下的八种模式代码:
在这里插入图片描述

4.读取输入电平的函数在这里插入图片描述
5.读取输出电平的函数
在这里插入图片描述
6.设置输出电平的函数在这里插入图片描述

7.使能IO口时钟函数
在这里插入图片描述

三、跑马灯实验–寄存器

1.相关寄存器

在这里插入图片描述

2.直接对寄存器进行控制从而控制LED灯的亮灭。
3.代码
在这里插入图片描述
**

四、跑马灯实验–位操作

1.通过直接对IO口的地址进行操作来改变IO口的值,达到操作IO的目的。
在这里插入图片描述

在这里插入图片描述

2.映射关系
在这里插入图片描述

  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stm32来控制spi接口的oled,oled为6pin接口 #define __OLED_SPI_H #include "stm32f10x.h" #define OLED_SPI_GPIO GPIOF #define OLED_SPI_RCCEN RCC_APB2Periph_GPIOF #define OLED_SPI_SCL GPIO_Pin_14 //D0 #define OLED_SPI_SDA GPIO_Pin_13 //D1 #define OLED_SPI_RST GPIO_Pin_11 //RST #define OLED_SPI_DC GPIO_Pin_12 //DC #define OLED_CMD 0 //??? #define OLED_DATA 1 //??? #define OLED_SPI_D0_OL GPIO_ResetBits(OLED_SPI_GPIO, OLED_SPI_SCL) //D0 IO?????? #define OLED_SPI_D0_OH GPIO_SetBits(OLED_SPI_GPIO, OLED_SPI_SCL) //D0 IO?????? #define OLED_SPI_D1_OL GPIO_ResetBits(OLED_SPI_GPIO, OLED_SPI_SDA) //D1 IO?????? #define OLED_SPI_D1_OH GPIO_SetBits(OLED_SPI_GPIO, OLED_SPI_SDA) //D1 IO?????? #define OLED_SPI_RST_OL GPIO_ResetBits(OLED_SPI_GPIO, OLED_SPI_RST) //RST IO?????? #define OLED_SPI_RST_OH GPIO_SetBits(OLED_SPI_GPIO, OLED_SPI_RST) //RST IO?????? #define OLED_SPI_DC_OL GPIO_ResetBits(OLED_SPI_GPIO, OLED_SPI_DC) //DC IO?????? #define OLED_SPI_DC_OH GPIO_SetBits(OLED_SPI_GPIO, OLED_SPI_DC) //DC IO?????? #define OLED_SPI_RST_Clr() GPIO_ResetBits(OLED_SPI_GPIO, OLED_SPI_RST) //RST IO?????? #define OLED_SPI_RST_Set() GPIO_SetBits(OLED_SPI_GPIO, OLED_SPI_RST) //RST IO?????? #define OLED_SPI_RS_Clr() GPIO_ResetBits(OLED_SPI_GPIO, OLED_SPI_DC) //DC IO?????? #define OLED_SPI_RS_Set() GPIO_SetBits(OLED_SPI_GPIO, OLED_SPI_DC) //DC IO?????? #define OLED_SPI_SCLK_Clr() GPIO_ResetBits(OLED_SPI_GPIO, OLED_SPI_SCL) //D0 IO?????? #define OLED_SPI_SCLK_Set() GPIO_SetBits(OLED_SPI_GPIO, OLED_SPI_SCL) //D0 IO?????? #define OLED_SPI_SDIN_Clr() GPIO_ResetBits(OLED_SPI_GPIO, OLED_SPI_SDA) //D1 IO?????? #define OLED_SPI_SDIN_Set() GPIO_SetBits(OLED_SPI_GPIO, OLED_SPI_SDA) //D1 IO?????? void OLED_SPI_WR_Byte(uint8_t dat,uint8_t cmd); void OLED_SPI_Init(void); void OLED_SPI_WrDat(unsigned char data); void OLED_SPI_WrCmd(unsigned char cmd); void OLED_SPI_Set_Pos(unsigned char x, unsigned char y); void OLED_SPI_Fill(unsigned char bmp_data); void OLED_SPI_CLS(void); void OLED2_P6x8Str(u8 x,u8 y,u8 ch[]);//小字符串; void OLED2_P16x32Str(u8 x,u8 y,unsigned char ch[]); void sssb1(void); void sssb2(void); void sspb1(void); void ssxl(void); void hallokitty_bmp(void); void sjb_bmp(u8 rock); void LCD_PutPixel(u8 x,u8 y); void LCD_Put_Column(u8 x,u8 y,u8 data); void OLED_write_2_num(unsigned char X,unsigned char Y,signed int s); void OLED_write_char(unsigned char c); #endif
正点原子stm32f103项目keil是一个基于STM32F103芯片的项目,使用Keil开发环境进行开发。该项目包含了main.c、beep.h和EXTI.h等文件。在main.c文件中,包含了beep.h、key.h和EXTI.h头文件,并定义了一个主函数。在beep.h文件中,定义了BEEP_Init函数。此外,还需要设置头文件路径和宏定义全局变量。在Keil中,可以通过点击魔法棒,选择c/c++,然后在Include Path中添加头文件路径。同时,在Define输入框中填写相应的宏定义,如"STM32F10X_HD,USE_STDPERIPH_DRIVER"。这样就可以进行正点原子stm32f103项目的开发了。 #### 引用[.reference_title] - *1* *2* [正点原子STM32F103综合课程操作学习笔记(包含代码)](https://blog.csdn.net/weixin_47681071/article/details/118404776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [正点原子STM32F103ZET6学习笔记-新建库函数工程模板](https://blog.csdn.net/qq_63306482/article/details/126180744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值