STM32入门编程总结2

发布者:清新时光最新更新时间:2023-06-21 来源: elecfans关键字:STM32  入门  编程总结 手机看文章 扫描二维码
随时随地手机看文章

上手思路,第一步先查芯片datasheet,一切以官网资料为准,可以在STM32 Cube MX软件里选择 ACCESS  TO  MCU  SELECTOR ,在左上角输入 STM32F103C8后,点击 datasheet 自动打开 芯片手册,点击另存为保存到桌面慢慢看。1看封装,2看供电,3看GPIO,4看中断,FLASH大小+USART也瞅瞅看。建议先搜个官方开发板原理图混个脸熟,软件项目文件打开后先编译一遍能否 0 error (s) 0 warning(s)。


最小系统,3.3V供电电路(2.0-3.6V)+复位电路(低电平复位)+8M晶振 + 启动选择电路(BOOT0 、BOOT1)+调试下载SWD接口(PA13、PA14)。


STM32芯片有三种启动方式:1闪存FLASH(BOOT0=0,B00T1=X),这个用的最多,STM32F103C8T6中64K FLASH就是这个FLASH;2 系统存储器启动(BOOT0=1,B00T1=0),用串口给STM32下载程序时用这个方式(仅限于UART1,STM32别的串口不支持下载程序),3 SRAM启动(BOOT0=1,BOOT1=1),芯片内RAM启动,掉电丢失(用的很少)。切换STM32启动方式跳帽后,重新上电才起作用,通着电直接切换无效。


STM32串口下载保姆式教程:

1核实串口助手是否安装好驱动,TXD、RXD短接后能发能收证明串口助手没问题,串口助手调节好3.3V电压;

2先调节好STM32开发板BOOT0=1,BOOT1=0跳帽,然后把串助手的TXD接开发板PA10,RXD接PA9,再通电把串口助手插入电脑USB口;

3打开STM32CubeProgrammer, 选择右上角的“UART”选项(默认是ST-LINK),在下面的Port里选择对应的COM 口,一般那个COM1不是串口助手的,COM3 或者COM4啥的大概率是正确的COM口,点击 Connect成功后会提示绿灯(Conneted),然后打开目标HEX文件下载即可。


注:下载完毕后还需要把BOOT跳帽恢复到BOOT0 = 0,BOOT1=X(0、1均可),才能正常从FLASH里启动程序。平时开发调试用的最多的还是SWD方式连接四根线:VCC、GND、DIO(PA13)、CLK(PA14)。


开发方式,汇编语言很少用了,51、以及STM32的启动文件(STARTUP.A51、startup_stm32f103xb.s)是汇编语言编写的,这俩文件是官方提供,用户一般也不会改这里面的参数;用C语言操作寄存器,太累+耗时间,我听过一个真实的段子,某个工科大学举办电子设计大赛,有个老铁技术很彪悍,不用官方库自己写寄存器,结果因为太耗时间,库还没写完初赛就被淘汰了。。。


标准库开发属于ST官方第一代开发方式,当年32bit MCU刚刚兴起时,其他外国公司只提供寄存器对应地址datasheet,老一辈嵌入式软件工程师英文不太好,对32bit MCU的英文资料都懒得看,ST:“我来我来,不会英语没关系,我给大家翻译成中文参考手册,寄存器太多不好编程?没事儿,ST标准库把常用的外设寄存器都定义配置好,您直接调用对应外设的函数就好”,ST把国内嵌入式软件工程师当大爷伺候,伺候了10年,ST就成了国内32bit MCU界的一哥;HAL库,ST官方第二代开发方式(当前主推HAL库,标准库已经停止维护),HAL是英文单词hardware  abstracTIon  layer首字母缩写,中文直译是“硬件抽象层”,核心目的是提高项目代码的通用性,项目A的代码原来只能在ST的A型号芯片运行,假设A型号芯片缺货,B型号芯片不缺货,如果项目A的代码能够直接在B型号芯片运行多好呀,或者只需要做很小改动就可以在B型号芯片运行,ST盈利方式是靠卖芯片赚钱,ST芯片开发门槛越低,会用ST芯片的工程师越多,则芯片卖得越多。


HAL兼容性,同一个F103系列的不同型号芯片HAL库程序可以直接烧录使用,例如把STM32F103C8T6的程序烧到STM32F103ZET6,同一个F030系列里的不同型号也类似,(前提是项目使用的外设资源两个芯片都有才行),HAL库是巧妇,巧妇难为无米之炊,HAL库没办法运用芯片没有的外设资源。


STM32Cube MX一键创建项目初始化代码,极大降低了配置项目的工作量,在标准库时代,单单是STM32项目文件的各种配置就足已劝退一大波嵌入式小白,在51世界里,一行“P0 = 0xfe;”就足矣点亮一个LED灯,再看标准库的一大堆.h .c文件,倒腾了一上午一编译好几十个error(s)  warning (s),看着就头皮发麻,忙活了半天LED灯也没点亮。。。

用HAL库生成初始化项目代码后,打开用keil编写代码时,所有用户自定义的代码只能在绿色的/* USER CODE BEGIN 1 */

/* USER CODE END 1 */  之间写,否则下次重新配置后就会自动删除。例:   /* USER CODE BEGIN 3 */              

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);           

/* USER CODE END 3 */

HAL库是大势所趋,HAL库后续的终极目标,类似于java程序,一次编译,到处运行,类似于.txt文档的兼容性,在各个电脑系统上都可以打开。芯片硬件资源越来越丰富,性能越来越强,软件编程的门槛越来越低,我预感ST第三代开发方式是拖拽外设模块搭积木式编程。到那时候,MCU编程这事儿,是个宝宝就会。

.hex文件内部包含了真正烧录到芯片内部的.bin文件+地址信息,如果.bin文件比作水杯里的水,那么.hex文件就是水杯(地址信息)+水(.bin)。

ST-link V2下载器直接连到电脑的USB口更稳妥,中间不要经过USB-hub,实测有时候经过USB-hub会提示“No ST-LINK detected”,中间环节越少,出现幺蛾子的概率越低。


关键字:STM32  入门  编程总结 引用地址:STM32入门编程总结2

上一篇:剖析STM32-定时器2
下一篇:STM32芯片引脚为什么有那么多组VDD?

推荐阅读最新更新时间:2024-11-11 10:42

入门知识分享之CAN总线
  一、CAN总线的概述   CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN控制装置。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。一个由CAN 总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,
[嵌入式]
关于STM32 ADC速度的问题
STM32F103xx系列称为增强型产品,增强型产品的最高时钟频率可以达到72MHz。增强型产品的英文名称为Performance Line。 STM32F101xx系列称为基本型产品,基本型产品的最高时钟频率可以达到36MHz。基本型产品的英文名称为Access Line。 根据设计,当ADC模块的频率为14MHz时,可以达到ADC的最快采样转换速度。 要得到14MHz的ADC频率,就要求SYSCLK的频率是14MHz的倍数,即14MHz、28MHz、42MHz、56MHz、70MHz、 84MHz等;对于基本型产品14MHz和28MHz处于它的最大允许频率范围内;对于增强型产品,14MHz、28MHz、42MHz、5
[单片机]
基于MDK编译器 STM32与12864液晶显示程序 和电路连接
里附上的是主程序部分和电路连接 这里用的12864液晶是5v的,电路链接部分 RS PE2 RW PE4 EN PE6 15口PSB串并 PE3 #include stm32f10x.h GPIO_InitTypeDef GPIO_InitStructure; #define RS_SET GPIO_SetBits(GPIOE, GPIO_Pin_2) #define RS_CLR GPIO_ResetBits(GPIOE, GPIO_Pin_2) #define RW_SET GPIO_SetBits(GPIOE, GPIO_Pin_4) #define RW_CLR GPIO_Re
[单片机]
STM32程序跳转需要注意的问题
Note: keil生成的.axf或者.elf都是可以执行的镜像文件。 IAP - User Program 需要注意的问题 要设置好好中断向量的问题,假设User Program 开始地址是(0x08008000),那么中断向量就必须设在在0x08008000处,中断向量要设置program的开始的位置。 User Program到IAP主要是要设置好中断向量,跳转前要注意设置中断向量在IAP程序(0x08000000)的开始地方即(0x08000000)。还要关闭所有中断,如下操作: NVIC_SetVectorTable(0x08000000, 0x00); __disable_irq(); 问题:如果这样
[单片机]
结合STM32给大家描述一下单片机常见的划分区域
编排 | strongerHuang 看到有小伙伴在讨论关于单片机内存的话题,今天就结合STM32给大家描述一下常见的划分区域。 在一个STM32程序代码中,从内存高地址到内存低地址,依次分布着栈区、堆区、全局区(静态区)、常量区、代码区,其中全局区中高地址分布着.bss段,低地址分布着.data段。 总的分布如下所示: 内存高地址 栈区 堆区 .bss段 .data段 常量区 内存低地址 代码区 一、栈区(stack) 临时创建的局部变量存放在栈区。 函数调用时,其入口参数存放在栈区。 函数返回时,其返回值存放在栈区。 const定义的局部变量存放在栈区。 2、堆区(heap) 堆区用于存放程序运行
[单片机]
结合<font color='red'>STM32</font>给大家描述一下单片机常见的划分区域
STM32基本知识的详细剖析
STM32是一种功能比较强大的32位单片机,广泛应用于各种嵌入式设备中,由于它的普及性及丰富的资源,受到广大嵌入式开发者的喜欢,但要想学好用好STM32也并非易事,毕竟,相比8位、16位产品,STM32要复杂得多。 STM32的时钟 众所周知STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实它只有四个,因为从下图中可以看到PLL都是由HSI或HSE提供的。 其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候
[单片机]
对<font color='red'>STM32</font>基本知识的详细剖析
STM32独立看门狗介绍_STM32单片机独立看门狗实验
  STM32独立看门狗简介   单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)。   STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部RC时钟,所以并不是准确的40Khz,而是在30~60Khz之间的一个可变化的时钟,只是我们在估算的时候,以40Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。   涉及的寄存器有:键寄存器
[单片机]
STM32 驱动例程
1、IO输出 led.c #include #include led.h //初始输出口.并使能这两个口的时钟 //LED IO初始化 void LED_Init(void) { RCC- APB2ENR|=1 2; //使能PORTA时钟 RCC- APB2ENR|=1 3; //使能PORTB时钟 GPIOA- CRL|=0X00000300;//PA2 推挽输出 GPIOA- ODR|=1 2; //PA2 输出高 GPIOA- CRL|=0X00003000;//PA3 推挽输出 GPIOA- ODR|=1 3; //PA3 输出高 GPIOB-
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved