原创 拿到一个stm32芯片新工程的操作思路

2021-5-13 12:07 272 1 1 分类: MCU/ 嵌入式
步骤:
   (1)收集芯片型号英文手册,中文手册,cortex-m3/4手册,具体用到的外设手册;
   (2)需要分析的方面:
                时钟频率,也叫时钟树,电气设备都要确定工作频率,不同工作频率的片上外设连接的芯片时钟总线不同,有AHBx、APBx,所以需要在代码中体现选择了哪条时钟总线,参考《STM32Fxxx 中文参考手册》第x章节,找到对应时钟总线的 “外设时钟使能寄存器,之后操作相应的位即可,如GPIOF的时钟控制位在 AHB1 的外设时钟使能寄存器 的 bit5,写 1 使能。所有的片上外设在未使用时,时钟处于关闭状态,此时对寄存器的操作无效 ,所以要想用哪个片上外设,第一步雷打不动:开时钟
                工作时序(IIC、SPI)
                中断优先级;
   (3)新建一个keil(含标准库,宏名在stm32fxxx.h中找#if !defined后面()里的内容 )工程;
CMSIS 程序结构。 规定程序开始运行时执行的第一个程序必须是 SystemInit()(用于对系统进行初始化设置) ,凡是标准库函数初始化函数名都是以 Init /init 结尾,在 SystemInit() 函数之后执行的函数才是 main 函数。
   (4)GPIO
复用功能的说明(信号的流向):M4内核-->(非GPIO)片上外设-->GPIO
                通用定时器用 GPIO 输出 pwm,这时 CPU 告诉通用定时器周期是多长,高电平时间占多长,其他不管,具体怎么输出的是通用定时器自己的事情
模拟功能 的说明:信号输入到 STM32 内部集成的 ADC 片上外设中
                仅用于ADC,DAC
锁定机制的说明:可以冻结 IO 配置
                在一些可能影响芯片运行的环境如磁场、电场使用。
一组 GPIO的16个IO口共用一套完整寄存器,通过写入设置参数进相关寄存器来使用GPIO,设置步骤是定义一个指向固定地址的指针变量,固定地址查看stm32fxxx手册的“存储器映射”部分(一般在开头几章)和“各个片上外设的寄存器表(偏移地址)”,把0或1赋值给这个变量的对应位,具体对应的哪个位查看stm32fxxx手册的GPIO寄存器部分,这样,即完成对寄存器编程,进而所谓控制stm32芯片做我们想让它做的事。
用于输出:
                要想独立输出高电平 ,则选用推挽模式
                如果有能提高驱动能力的上拉电阻,这时要输出高电平,选用开漏模式
                如果偏向稳定性,闹一个下拉电阻
               实际开发产品时常用开漏模式,原因是要降低产品功耗,并且MCU更容易输出低电平,当要输出高电平时,用上拉电阻把电平拉高,程序的体现是库函数中对应结构体对象的上拉下拉成员设置成上拉。

                数据流向是变量的值赋给ODR寄存器(数据输出寄存器)
                实际操作思路:
                                查看官方芯片手册stm32fxxx手册的GPIO一章的电子器件图,从进入芯片的口顺着电路摸向出芯片的口,途中经历的可编程的元器件是代码的用武之地,主要是赋值成0或1,毕竟0代表低电平,1代表高电平。
                                输出速度由电子器件图的名为输出控制的框设置,所谓速度,是引脚输出高低电平的快慢。
                                设置输出数据寄存器可以直接赋值,也可以间接通过赋值置位复位寄存器,这里提供思路,具体实现看stm32fxxx手册的置位复位寄存器。
                    实际操作步骤(输出配置过程)
                                开启IO口的时钟(参考stm32fxxx手册的RCC寄存器部分,根据IO口工作频率所在的时钟时钟总线查看对应寄存器的位)
                                ①、设置 IO 为输出模式
                                ②、设置输出速度
                                ③、设置推挽输出/开漏输出
                                ④、设置上拉/下拉电阻
                                ⑤、设置输出电平(设置输出数据寄存器ODR为 1 还是 0)

用于输入:
               如果外电路接了上拉电阻和下拉电阻,则选择使用浮空
               //在外围电路中没有接入上拉电阻/下拉电阻时根据情况选择选择使用一个,用于确定引脚悬空(外围没有接入任何东西)时的电平状态

               //输入状态下使用上拉和下拉的如何判断?
               输入时无法输出(正在输出时可以发生输入,但是发生输入后一旦开始了输入,关闭输出),每隔1时钟总线的时钟周期检测IO口的电平并用0或1保存在输入数据寄存器(IDR)中,此时程序中用变量接收IDR的值的话,变量值为0或1即为IO口的电平信号。
                 实际操作步骤(输入配置过程
                                //激活片上外设时钟
                                ①、设置 IO 为输入模式
                                ②、设置上拉/下拉电阻
                                ③、获取检测结果(读取输入数据寄存器 ,1 个IO口对应芯片的1个银色细细短短的插针,同时对应 1 个二进制位,它不是 1 个引脚对应一整个寄存器

  总  结  :GPIO要么输入要么输出要么复用要么模拟,复用时每一个 IO 最多有 16 种复用功能,但一个时刻只能用一种,所以1组16个IO口,1个IO口有16个复用功能,共计1组有256个复用功能,如果对应stm32芯片有A-I组,那么组的数量*256
复位:
                 寄存器中的数据是易失性数据,即掉电丢失,所以每次上电都是在重新跑程序,每次复位都是在重新跑程序
   (?)中断找stm32xxx.h中的typedef enum IRQn;


作者: Jackonetwothree刘工, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3957935.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
相关推荐阅读
Jackonetwothree刘工 2021-06-05 16:11
一个产品的完整流程
S1 工业设计师画好外观S2 提功能需求S3 内部结构设计S4 电路设计S5 程序设计S6 组装调试S7 开模具S7 PCBS8 组装出货...
Jackonetwothree刘工 2021-06-03 15:32
结构体
(坑位1) (坑位2) (坑位3){}(坑位4);结构体的4个形式请移步“结构体的4个形式”文章,格式原因将两部分拆分开来,本篇是文本格式,“结构体的4个形式”是表格格式 ...
Jackonetwothree刘工 2021-06-03 15:28
结构体的4个形式
坑位1 坑位2 坑位3 坑位4 使用 形式1 空 struct 结构体名 空 struc...
Jackonetwothree刘工 2021-05-30 19:40
降成本的方法
从EMMC启动到将整个BOM成本降到最低...
Jackonetwothree刘工 2021-05-29 19:50
由数组申请的空间,ARM处理器从小地址增长到大地址,从栈顶往栈底压,栈底小地址,栈顶大地址,从数组的最后一个元素的地址朝前面的元素地址压栈...
Jackonetwothree刘工 2021-05-27 01:14
MCU、DSP、SOC、FPGA
MCU:TI的MSP430DSP:TI,DSP主要针对一些计算能力要求较高的应用,如视频图像处理、智能机器人、数字无线、宽带访问、数字音频、高分辨率成像和数字电机控制等SOC:TI的达芬奇异构芯片FP...
广告
我要评论
0
1
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /5 下一条