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

2021-5-13 12:07 2286 12 12 分类: MCU/ 嵌入式
步骤:
   (1)收集主控芯片型号英文datasheet和中文datasheet、内核手册、其他芯片的手册;可以在半岛小芯http://www.semiee.com/查询和下载
   (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条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /2 下一条