历史上的今天
返回首页

历史上的今天

今天是:2025年12月07日(星期日)

正在发生

2022年12月07日 | STM32F103+RT-Thread从零开始(一)——点亮LED

2022-12-07 来源:zhihu

STM32系列MCU

STM32系列芯片包括F0/F1/F2/F3/F4/F7/L0/L1/L4/H7等系列芯片芯片。不同系列的芯片适用于不同的应用场景。 F0/L0基于ARM Cortex-M0,F1/F2/L1系列基于ARM Cortex-M3,F3/F4/L4系列基于ARM Cortex-M4,F7/H7基于ARM Cortex-M7。L系列表示超低功耗,H表示超高性能(对应就是高功耗了),F就是个折中方案了,性能不错,功耗也不高。

其他的先不管,F1系列芯片主要分类如下:

· 超值型STM32F100 - 24 MHz CPU,具有电机控制和CEC功能· 基本型STM32F101 - 36 MHz CPU,具有高达1MB的Flash· 连接型STM32F102 – 48 MHz CPU具备USB FS device接口· 增强型STM32F103 - 72 MHz CPU,具有高达1MB的Flash、电机控制、USB和CAN· 互联型STM32F105/107 - 72 MHz CPU,具有以太网MAC、CAN和USB 2.0 OTGSTM32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下:

具体信息可查阅网站https://www.stmcu.com.cn/。

RTT操作系统

官网的简介:

RT-Thread是一款来自中国的开源嵌入式实时操作系统,由国内一些专业开发人员从2006年开始开发、维护,除了类似FreeRTOS和UCOS的实时操作系统内核外,也包括一系列应用组件和驱动框架,如TCP/IP协议栈,虚拟文件系统,POSIX接口,图形用户界面,FreeModbus主从协议栈,CAN框架,动态模块等,因为系统稳定,功能丰富的特性被广泛用于新能源,电网,风机等高可靠性行业和设备上,已经被验证是一款高可靠的实时操作系统。 RT-Thread实时操作系统遵循GPLv2+许可证,实时操作系统内核及所有开源组件可以免费在商业产品中使用,不需要公布应用源码,没有任何潜在商业风险。

RT-Thread操作系统源码风格与linux一致,在官方提供的源码中,包含有诸多芯片的工程示例,LPC系列和STM32F系列的很多。再者RT-Thread代码开源,又有那么详细的资料,如果遇到官方bsp下没有的芯片,对于动手能力强的同学,自己动手移植也比较方便。而且官方提供了详细的中文文档,对于英语不太好的同学简直就是一个福音。而且,RT-Thread提供了丰富的组件,使用者可以非常方便的实现诸如GUI、网络协议栈、Modbus甚至是SQLite数据库等功能。后续使用的时候再细细体会它的强大之处了。

写寄存器Or利用固件库

嵌入式的编程,往下说就是操作MCU的寄存器。而固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。相对于固件库的方式,直接写寄存器的代码更为简洁,只需要对指定的寄存器进行需要的操作就可以了,但是对于STM32来说,寄存器多达数百个,记起来也是一件非常让人头疼的事情。ST推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些函数即可。 关于写寄存器还是利用固件库去开发哪个好,一直都有争议,只能说存在即为合理,各有各的好处,我个人比较懒,不太喜欢去记那些寄存器都是啥。再者,我也不是专门搞STM32的,要是用写寄存器的方式开发的话,过一段时间不弄,再回来估计又得花些时间对着文档看了。所以在后续的博客,我也都会利用固件库开发。当然,用不用是一回事儿,根据官网技术文档,操作寄存器的方式是必须要会的。 个人建议,还是需要学会看硬件文档,看官方的技术资料,而不是遇到问题就百度。学会看官方的技术文档后,遇到问题解决起来将会事半功倍。

点亮LED

点亮LED,首先自然是安装Keil了。当然,使用其他工具也可以,对于我来说,我还是比较钟情于Keil。我现在使用的是Keil5,编译工具链为MDK-ARM v5.24。开发板为淘宝上找的便宜的不能再便宜的一块STM32C8T6开发板,引脚都要自己焊。下载线为ST-Link v2。根据淘宝商提供的硬件资料,这个板子PB12连接了一个LED灯,LED另外一端连接了上拉电阻,即LED在PB12低电平时点亮。



废话不说了,Keil的安装和破解,网上多的是,随便找个教程,走一走就完了。

第一步,创建工程

打开Keil后,首先需要创建个工程。点击project->New μVision Project。



填写工程名



选择芯片,如果没有你要的芯片,就需要到官网上去下载,然后安装。



选择需要用到的功能,Core、Startup和GPIO,可以看到下面有警告,GPIO依赖FrameWork和RCC,也要去勾选上就好了。



然后确定,工程就创建成功了。

第二步,增加main.c文件到工程中

点击如下按钮,创建一个新文件,并保存文件到工程目录中。



点击工程管理按钮,管理工程



点击Add Files 把main.c加入到Source Group 1下,Target 1和Source Group 1都可以修改,改成一个合适的名字。



第三部,编写main.c 文件

#include "stm32f10x.h"

#include "stm32f10x_gpio.h"

#include "stm32f10x_rcc.h"

#define CLOCK 72/8

//时钟配置,后续再详细捋时钟这块的东西,现在姑且按照这样设置这者


void RCC_Configuration(void)

{

ErrorStatus HSEStartUpStatus;

//将RCC寄存器设置为默认值

RCC_DeInit();

//打开外部高速时钟

RCC_HSEConfig(RCC_HSE_ON);

//等待外部高速时钟晶振起振

HSEStartUpStatus = RCC_WaitForHSEStartUp();


if(HSEStartUpStatus == SUCCESS){


//设置PLL时钟时钟源及倍频系数

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_16);


//设置AHB时钟


RCC_HCLKConfig(RCC_SYSCLK_Div1);


//设置APB1低速时钟


RCC_PCLK1Config(RCC_HCLK_Div2);


//设置APB2高速时钟


RCC_PCLK2Config(RCC_HCLK_Div1);

//使能PLL


RCC_PLLCmd(ENABLE);


//等待PLL工作


while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

{

}


//设置系统时钟为PLL时钟


RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);


//等待系统时钟切换为PLL时钟


while(RCC_GetSYSCLKSource() != 0x08)

{

}

}


//打开需要使用的外设的时钟


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |



RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);



RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

}

//延时微妙


void delay_us(unsigned int us)

{

u8 n;

while(us--)for(n=0;n}

int main(){


RCC_Configuration();


//设置GPIOB12 为推挽输出模式,速度为2MHz


GPIO_InitTypeDef gpioInit;


gpioInit.GPIO_Mode=GPIO_Mode_Out_PP;


gpioInit.GPIO_Pin=GPIO_Pin_12;


gpioInit.GPIO_Speed=GPIO_Speed_2MHz;


GPIO_Init(GPIOB,&gpioInit);

while(1){

//点亮LED


GPIO_ResetBits(GPIOB,GPIO_Pin_12);


//延时500ms


delay_us(500000);


//关闭LED


GPIO_SetBits(GPIOB,GPIO_Pin_12);


//延时500ms


delay_us(500000);

}

}

第四步,配置并编译烧写程序

点击build按钮,或者rebuild按钮进行编译



编译成功,Build Output输出如下:



无错误,然后可以进行程序烧写,烧写前需要设置Options for target。我使用的是ST-Link,所以需要选择ST-Link Debugger。然后点击后面的Setting按钮,进行其他设置。










设置完毕后点击download按钮,进行烧写即可。烧写时,让Boot0接低电平


推荐阅读

史海拾趣

ETC公司的发展小趣事

速通科技始终将用户体验放在首位。公司不断完善ETC系统的服务功能,提高了系统的稳定性和易用性。同时,速通科技还建立了完善的客户服务体系,为用户提供24小时不间断的在线客服支持。这些举措大大提高了用户对ETC系统的满意度和信任度。

Alpha 3 Manufacturing公司的发展小趣事

Alpha 3 Manufacturing公司深知产品质量是企业生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格的把控。同时,公司还引入了先进的生产设备和检测仪器,确保产品的质量和性能达到国际先进水平。此外,公司还定期对生产过程进行审查和改进,不断提高生产效率和产品质量。

风华(FH)公司的发展小趣事

随着光伏胶膜业务的快速发展,福斯特面临着仓库管理和存储的巨大挑战。光伏胶膜成品体积大、重量重,传统人工作业方式效率低下且劳动强度大。为了应对这一挑战,福斯特引入了智能仓储系统,与亨通智能合作打造自动化立库系统。该系统通过堆垛机、RGV、缠绕膜等设备的配合使用,实现了库内产品的全面自动化搬运、存储与管理。这不仅大大提高了仓库的运营管理效率,还确保了产品的先进先出和库存盘点的准确性。这一智能化改造不仅提升了福斯特自身的竞争力,也为整个光伏行业的数字化转型树立了标杆。

Aplus Integrated Circuits公司的发展小趣事

为了保持技术领先地位,Aplus Integrated Circuits公司注重产学研合作。公司与多所高校和研究机构建立了紧密的合作关系,共同开展科研项目和技术攻关。这种合作模式不仅为公司带来了源源不断的技术创新动力,还为公司培养了一批高素质的研发人才。

Good Sky Electric Co Ltd公司的发展小趣事
Z32A、Z32K、Z3025J型摇臂钻床广泛应用于机械加工领域中的钻孔、扩孔、铰孔、平面及攻螺纹等工序。它们适用于小批生产和在装配、修理车间加工大、重型零件等场景,具有工艺先进、性能可靠、操作维修方便等特点。
极海半导体(Geehy)公司的发展小趣事
Z32A、Z32K、Z3025J型摇臂钻床的主电路通常包括断路器、主电路熔断器、接触器正反转主触点、热继电器以及电机等关键元件。这些元件共同协作,确保钻床的安全稳定运行。

问答坊 | AI 解惑

2006大事记

日期:2007-1-1  来源:今日电子 转眼间又过了一年,编辑部对2006年发生的一些业界大事进行了简单梳理,尽量按照时间顺序进行罗列。业界厂商的分分合合,新技术的飞速发展,标准的不断出台,中国自主创新能力的持续增强,让我们在回顾2006年的同时 ...…

查看全部问答>

CCS3.3最新版本升级补丁3.3.81

CCS3.3的最新升级补丁包:3.3.81,以及详细的升级说明最新版本支持TI最新的芯片TMS320F28335等的在线仿真,烧录。 烧录所用仿真器为合众达的XDS510,驱动也是其提供最新烧录驱动。 http://www.hellodsp.com/bbs/viewthread.php?tid=11909&extra=pa ...…

查看全部问答>

如何解决英国CT伺服驱动器无显示故障

驱动器品牌:英国CT 驱动器型号:DBE402 故障现象:一台配套英国CT驱动器的机床,在加工过程当中突然停机,开机后其中有一个驱动器型号:DBE402 数码管无显示,机床无法正常工作。 故障分析与解决:根据驱动器数码管无显示的现象,结合机床电气原 ...…

查看全部问答>

寻QFP-40封装的单片机

请问哪家有QFP-40PIN封装的单片机,型号是什么?谢谢!!…

查看全部问答>

请问:有什么比较小巧、便宜、引脚多的座子?

我在设计一款转接板,需要的引脚有100~160个之多。 PCI座子有198个引脚,可是它的尺寸有点大; miniPCI的插座一般是贴着板子的,而我要的是朝上立着的,比如PCI的样式; 并且似乎miniPCI的座子比较贵。 请大家给我推荐几种座子,一般双列直插 ...…

查看全部问答>

>>>>诚心请教大侠个人发展问题,大侠请进,菜鸟勿扰

在下以十二万分的诚心向各位先贤前辈请教人生大事.欢迎有志的兄弟发表言论.如果不喜欢的兄弟可以绕道,没必要乱说.菜鸟勿扰 希望能有大侠对在下的发展方向做出建议 在下今年24,上海读研即将毕业.本科学的通信,基础扎实,自认为领悟了通信的半点精髓 ...…

查看全部问答>

各种常用接口电平比较

TTL电平的VIH/VIL一般是2V/0.8V,VOH/VOL一般是 2.4V/0.4V,不论是3.3V还是5V的TTL都一样的;CMOS的VIH/VIL一般是70%VCC/30%VCC,VOH/VOL一般是80% VCC/20%VCC,所以不同的电平不能互推!另外CMOS的速度比较快,一般的高速器件采用!常见 ...…

查看全部问答>

LM3S CAN的FIFO模式下数据收发问题??

           有没有高人指点一下啊!!      谢谢 一个CAN控制器的的多个报文对象构成一个发送FIFO或接受FIFO来进行CAN的数据收发,这同单个报文对象进行数据收发相比 ...…

查看全部问答>

求助169学习板spi问题

我有两块学习板2274和169,分别外扩flashat 45db041,在2274上使用正常,但在169的学习板上就始终不行,我刚刚接触msp430和spi很多问题不懂,boss又催得急,我特别着急,做梦都想着,请各位大虾拔刀相助,感激不尽。我觉得应该是单片机的spi我初始 ...…

查看全部问答>

南华大学黄智伟系列--电子设计竞赛作品制作过程中的一般调试方法

本帖最后由 paulhyde 于 2014-9-15 09:16 编辑    电子设计竞赛作品制作过程中与一般电子产品类似。根据经验,电子产品调试的一般方法可以归纳为:电路分块隔离、先直流后交流、先调节后固定、正确使用仪器、注意人机安全。   1. ...…

查看全部问答>