IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32入门 -> 正文阅读

[嵌入式]STM32入门

2021年7月7日学习进度汇报

基本实验环境构架:

概括:重新搭建了MDK5的安装下载环境,调试好J-LINK程序下载模块,具备stm32的基本开发环境,并且逐步尝试通过原理图,编程框架去修改所拥有的库函数。

?

判断JLINK是否能够成功连接的标准为:port端口上是否有SW的出现

若失败则显示为:

?

该处为暗色。

?

若JLINK不能够正常使用,则采取下载的备用方法采用FLYMCU的方式进行下载。如图所示:

?

?

?缺点:下载程序较慢,只适合软件调试,JLINK适合分布调试,同时STM32现在的适配的下载器主要是STLINK。

基础实验进展

温习了stm32的GPIO工作原理相关知识,并且根据视频完成跑马灯,蜂鸣器,按键输入,蜂鸣器,中断等配套实验,自主学习了关于中断,时钟,定时器等辅助知识。

GPIO口注意点:

注意:1)只有经过编译后才能用goto definition 寻找上一级定义。

2)GPIO的程序一定要改宏定义处,例如跑马灯程序中:、

?

?

不同开发板的端口不同,改正时一定要一起兼顾。

3)关于时钟信号的中不同的IO组,调用的时钟使能函数不同,主要注意以下几个:

#define RCC_APB2Periph_GPIOA???????????? ((uint32_t)0x00000004)

#define RCC_APB2Periph_GPIOB???????????? ((uint32_t)0x00000008)

#define RCC_APB2Periph_GPIOC???????????? ((uint32_t)0x00000010)

#define RCC_APB2Periph_GPIOD??????????? ?((uint32_t)0x00000020)

#define RCC_APB2Periph_GPIOE???????????? ((uint32_t)0x00000040)

#define RCC_APB2Periph_GPIOF???????????? ((uint32_t)0x00000080)

#define RCC_APB2Periph_GPIOG???????????? ((uint32_t)0x00000100)

#define RCC_AHBPeriph_FSMC????????????? ((uint32_t)0x00000100)

(显示屏FSMC需要用到)

4)大多数IO口都是可以兼容5V电压,要养成查芯片手册的意识。

?

?蜂鸣器注意点

  1. STM32 的单个 IO 最大可以提供 25mA 电流(而蜂鸣器的驱动电流是 30mA 左右,不用 STM32 的 IO 直接驱动蜂鸣器,而是 通过三极管扩流后再驱动蜂鸣器,这样 STM32 的 IO 只需要提供不到 1mA 的电流就足够了。
  2. 从原理图中查出相关的IO口连接,当 PB.8 输出高电平的时候,蜂鸣器将发声,当 PB.8 输出低电平的时候,蜂鸣器停止发声。

?

按键输入注意点

1)通过调用函数 GPIO_ReadInputDataBit()来读取 IO 口的状态的

2):KEY0、KEY1 和 KEY2 是低电平有效的,而 WK_UP 是高电平有效的,

并且外部都没有上下拉电阻,所以,需要在 STM32 内部设置上下拉。

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 设置成输入,下拉

  1. 输入是否支持连续按下的函数区别:

?

?

时钟模块

1.时钟源部分:

①、HSI 是高速内部时钟,RC 振荡器,频率为 8MHz。

②、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为

4MHz~16MHz。我们的开发板接的是 8M 的晶振。

③、LSI 是低速内部时钟,RC 振荡器,频率为 40kHz。独立看门狗的时钟源只能是 LSI,同时 LSI 还可以作为 RTC 的时钟源。

④、LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源。

⑤、PLL 为锁相环倍频输出,其时钟输入源可选择为 HSI/2、HSE 或者 HSE/2。倍频可选择为2~16 倍,但是其输出频率最大不得超过 72MHz。

其中需要理解的是 APB1 和 APB2 的区别,APB1 上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3 等等,APB2 上面连接的是高速外设包括 UART1、SPI1、Timer1、ADC1、ADC2、所有普通 IO 口(PA~PE)、第二功能 IO 口等。

这里总结一下 SystemInit()函数中设置的系统时钟大小:

SYSCLK(系统时钟) =72MHz

AHB 总线时钟(使用 SYSCLK) =72MHz

APB1 总线时钟(PCLK1) =36MHz

APB2 总线时钟(PCLK2) =72MHz

PLL 时钟 =72MHz

NVIC中断模块

NVIC_InitTypeDef 结构体中间有三个成员变量,这三个成员变量的作用是:

NVIC_IRQChannel:定义初始化的是哪个中断,这个我们可以在 stm32f10x.h 中找到

每个中断对应的名字。例如 USART1_IRQn。

NVIC_IRQChannelPreemptionPriority:定义这个中断的抢占优先级别。

NVIC_IRQChannelSubPriority:定义这个中断的子优先级别。

NVIC_IRQChannelCmd:该中断是否使能。

?

步骤:

1. 系统运行开始的时候设置中断分组。确定组号,也就是确定抢占优先级和子优先级的

分配位数。调用函数为 NVIC_PriorityGroupConfig();

2. 设置所用到的中断的中断优先级别。对每个中断调用函数为 NVIC_Init();

专项研究进度

概括:在显示屏方面,初步完成在用库函数的情况下完成对7寸LCD显示屏的显示管理,能初步了解TFTLCD显示原理和基本配置,能大致理解LCD-FSMC的基本函数组成,能够利用基本库函数在LCD屏显示字符,相应更改字符大小和颜色。(在一定范围内可行)。(实物见看开发板)

参考实验 TFT显示实验

1.常见指令:

1)0XD3,这个是读 ID4 指令,用于读取 LCD 控制器的 ID

2)0X36,这是存储访问控制指令,可以控制 ILI9341 存储器的读写方向

3)0X2A,这是列地址设置指令,在从左到右,从上到下的扫描方式(默认),该指令用于设置横坐标(x 坐标)。

4)0X2B,是页地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置纵坐标(y 坐标)

5)0X2C,该指令是写 GRAM 指令,在发送该指令之后,我们便可以往 LCD

的 GRAM 里面写入颜色数据了。

2.使用流程

?

3.FSMC,即灵活的静态存储控制器

当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1]→ FSMC-A[24:0]。

当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0]→ FSMC_A[25:0]。

不论外部接 8 位/16 位宽设备,FSMC_A[0]永远接在外部设备地址 A[0]。

过程较为复杂,只要学会调用函数即可。

4.主要应用函数:

void LCD_Sho+wString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)

组成由://写寄存器函数:void LCD_WR_REG(u16 regval)

//设置光标位置: void LCD_SetCursor(u16 Xpos, u16 Ypos)

//画点 ?:void LCD_DrawPoint(u16 x,u16 y)

??? //在指定位置显示一个字符

//size:字体大小 12/16/24

//mode:叠加方式(1)还是非叠加方式(0)

void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)

5.改编程序

??????? 应用switch case语句,输入自己的名字,(注意只能为英文)

最终改编函数后达到效果:背景不变,但字体颜色在不断更换,并且能分别显示ID,日期与字符

?

????? LCD_ShowString(50,40,200,24,24,"WarShip STM32 ");

??????????? LCD_ShowString(50,70,200,16,16,"TO BE WHAT YOU WANT");

??????????? LCD_ShowString(50,90,200,16,16,"MADE BY GUYH");

?????????? LCD_ShowString(50,110,200,16,16,"Hello WORLD");????????

??????????? LCD_ShowString(50,130,200,12,12,"2021/7/6");??

??????????? LCD_ShowString(50,150,200,16,16,lcd_id);??????????

下一阶段安排

  1. 准备去接触STEMWIN的相关内容,首先完成STEMWIN的无操作与带操作系统移植,逐步完善文本显示的范围,
  2. 继续学习stm32的基础内容例如AD转换,中断,串口调试等。对基础知识结构进行完善的同时对STEMWIN进行深入研究。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:57:52  更:2021-07-23 10:59:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:34:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码