通过“一个地方”在STM中最简单的开始

可能是,针对STM的AVR宗教战争的时代已经过去,但不,不,是的,两个阵营之间爆发了冲突。几乎所有有关AVR手工艺品的出版物都肯定会带有这样的评论:“是的,您可以抚摸祖母多少钱了,是时候改用STM了”,然后是价格,支脚数量和计时器方面的变化。如果STMshcher更高级,则肯定会表明AVR中没有DMA,并且不会,因此AVR应该死了。为什么没有一个简单的眨眼电压表温度计DMA,大量的16位定时器,100个引脚和一个12位ADC,通常没有人解释。为什么我们需要在这样的设备中需要这样的收割机,使得Tiny13可以轻松取出,而即使只有三分之一的资源也无法加载,没人知道。您只需要切换到STM32,就是这样。这里。

我必须说,人们渴望新颖。但是真的,我可以尝试吗?如果您喜欢它怎么办?这只是流行的STM32F103C8T6的参考手册,该手册以重量最大的1126页Blue平板电脑为基础,因此它实际上并没有“快速入门”。即使是一个单独的实用程序,也受到长辈“ kalokub”的憎恶,必须加以研究,这是什么。是的,深入Cube后,不太可能在5分钟内开始,由他产生的鞋垫并不是当晚最容易阅读的东西,只是进入额头,并不是每个人都可以在那谈论。

与此类似的许多文章,关于STM的快速简便入门,都需要单独讨论。对于所有这些文章,起初我对一种情况感到非常困惑。在这里,我们实际上没有写任何详细的解释。一堆有关如何创建项目的屏幕截图,然后立即编写代码,就像这样!那里是什么,为什么是这样,为什么是这样,在哪里得到所有这些看似可理解的词,没有人去研究,因为在编写有关安装Cale和Cuba以及启动项目的手册时,这些部队用光了。只有经过一段时间,每个人的个人,才了解正在发生的事情以及为什么会来。反过来,我提出了一种方法,而不是像其他所有人一样从头开始,而是从头开始。现在我们要做相反的事情,不要配置控制器,编写代码并启动它,而是立即进行调试,并以代码形式记录我们的行动。

因此,我们将Keil作为免费(最多32KB代码)环境安装。我们不会在Internet上描述此操作,安装程序的逐步操作必须由使用STM的人员掌握。我们启动项目:Project-New uVision Project,创建一个文件夹和一个项目文件。控制器选择窗口打开,在搜索中输入103C8并同意唯一选择的型号。

接下来,我们进入库选择窗口:



在这里,我们放置了三个代码:CMSIS-CORE,设备启动和设备GPIO。这套装置足以弹起一条腿,点亮LED。然后,您仍然必须进行配置,否则您将无能为力。 Alt + F7会启动位于Target的Project-Options的设置窗口,在“ Output”选项卡上,您需要选中“ Create HEX-File”复选框,以创建要上传到控制器的固件文件。接下来,在“调试”标签中,我们选择ST-Link,它实际上将加载固件并首次亮相:



通过程序员选择窗口旁边的“设置”按钮,我们进入“ Cortex-M目标驱动程序设置”窗口,在“ Flash下载“放一个daw”“重置并运行”。

在项目树中,右键单击“ Source Group 1”文件夹,在打开的向导中,创建main.c文件,我们将在其中编写代码。在打开的main.c中,右键单击第一个也是最重要的包含:



添加包含main和endless的代码,同时:

#include "stm32f10x.h"                  // Device header
int main(){
	while(1){
	}
}

奇怪的是,到此为止,这是一个现成的,易于理解的程序,可以正确地编译并加载到控制器中。我们按F7键,我们看到固件已成功组装,没有错误或警告。



从这一刻起,我们就可以完全访问控制器了,我们可以在调试行下输入它,并在所有方向上将其扭曲,然后它将做出响应。

Ctrl + F5键可引导我们进入调试状态,“ System Viewer Windows”按钮可让您启动用于控制寄存器寄存器和控制GPIO引脚的窗口。



此外,我建议您仍然使用参考手册,尤其是因为您甚至不需要下载它,请通过单击“查看”菜单的“书本”选项卡来使用它:



现在,我建议使用以下推理。从Blue Tablet的引脚排列上,可以看到LED挂在端口13的腿上。许多Internet资源和讨论总是提到在STM中执行某项操作之前,需要启用某些功能,否则,请设置时钟。事不宜迟,我们在pdf阅读器的搜索框中输入了所需的内容,即启用端口C:“ PORT C CLOCK ENABLE”。我们进入下图:



由此我们可以得出结论,在IOPCEN寄存器中启用了端口C的时钟。有了这些知识,我们进入调试模式下的RCC选项卡,并在搜索栏中输入该名称:



用对号标记所需的复选框,从这一刻起,我们认为端口C已启用。

现在,记住长期受苦的AVR,我们将寻找实际引脚的设置。为了使它起作用,有必要解释我们到底要从中得到什么。我们想跳到端口C的脚号13,为此,我们必须设置其操作模式。在《参考手册》的搜索栏中,我们以“端口位配置”驱动,这表示我们希望阅读隐藏支脚设置的位置。搜索将我们带到一个表,从该表可以看出,为了将支路分配为输出,有必要配置MODE和CNF寄存器:



从表20中可以看出,要将支路分配为推挽输出,必须复位寄存器CNF0和CNF1以及对状态MODE0和MODE1在表21中进行了描述,我将选择上限选项,最高10MHz,MODE0 = 1,MODE1 = 0。这就是我在GPIOC窗口中为CNF13和MODE13寄存器所做的操作



现在,我们已经配置了端口的时钟和操作模式。现在是时候确切地找出如何跳腿的时候了。用英语将端口位设置为“端口位设置”,我们将在手册中查找以下短语:



搜索将我们带到带有表格的页面,该表格清楚地表明由BS和BR对组成的BSRR寄存器负责设置端口支路的状态,位设置和位复位。我们在调试模式下的GPIOC窗口中找到这些寄存器,并通过用鼠标将寒鸦插入相应的复选框中而直接享受对第13脚的控制:



蓝色药丸板上的LED悬在腿和VCC之间,因此将其控制回寄存器名称。位设置(BS13寄存器)将其熄灭,而位复位(BR13寄存器)将其点燃。这些是原子操作的寄存器,在设置复选框后会重置它们。可以通过ODR寄存器(参考手册中的9.2.4端口输出数据寄存器(GPIOx_ODR))控制脚,它清楚地显示了寒鸦的安装和重置过程。



绿色和变暗的绿色LED表示一切正常。只需以main.c中的代码形式编写所有这些内容即可。这是非常葡萄干出现的地方,这区别于这种通过调试来理解STM控制器的方法,而与整个Internet所散布的其他方法不同。我建议只将调试窗口中看到的内容重写为代码。例:



设置端口操作模式并启用时钟;



他们打开端口分支,等待,将其关闭,依此类推:

#include "stm32f10x.h"                  // Device header

int main(){
	RCC->APB2ENR=0x00000010;			//  
	GPIOC->CRH=0x44144444;			//   Push-Pull  10MHz
	int i;								//     / 
	while(1){
		GPIOC->ODR=0x00002000;		//  LED,      
		i=2000000;					//    
		while (i) i--;					// 
		GPIOC->ODR=0x00000000;		//  LED
		i=2000000;					//  
		while (i) i--;					
	}
}


当然,这种方法远非最佳且不正确,但我认为这是最可理解和最简单的方法。此外,他介绍了如何使用数据表(参考手册),并且不会吓him他,例如阅读法力和编写Blink的多页代码。是的,没有抽象层,已经错过了很多东西,但是我认为您可以在基本开始的时候原谅这一点。然后读取法力并正确使用寄存器,现在LED闪烁,我们基本了解我们的工作方式和作法,最重要的是,所有这些缩写的来源。如果以前曾向我展示过这种学习STM的方法,那么也许我不会为9000个以上的AVR程序员收集程序,而这些程序中没有调试程序,但是会立即使用Cortex。确实,在AVR中没有可理解和可访问的调试,但是无论如何,忘记Tiny13还为时过早。她完成任务。

All Articles