总结一些STM32相关嵌入式的东西

一、STM32F1 和 F4 的区别?

1、内核不同:F1:M3内核,F4:M4内核
2、主频不同:F1:72MHz;F4:168MHz
3、浮点运算:F1无浮点运算单位,F4有
4、功能性能:F4外设比F1丰富,且功能更强大,比如GPIO翻转速率、上下拉电阻匹配、ADC精度等
5、内存大小:F1内部SRAM最大64K,F4有192K(112+64+16)

二、STM32启动过程

1、通过Boot引脚设定,寻找初始地址
2、初始化指针:_initial_sp
3、指向复位程序 Rest_Hander
4、设置异常中断:HardFault_Handler
5、设置系统时钟 Systemlnit
6、调用C库函数 _main

三、GPIO 工作模式

(1) GPIO_Mode_AIN 模拟输入
(2) GPIO_Mode_IN_FLOATING 浮空输入
(3) GPIO_Mode_IPD 下拉输入
(4) GPIO_Mode_IPU 上拉输入
(5) GPIO_Mode_Out_OD 开漏输出
(6) GPIO_Mode_Out_PP 推挽输出
(7) GPIO_Mode_AF_OD 复用开漏输出
(8) GPIO_Mode_AF_PP 复用推挽输出

APB2负责 AD、I/O、高级TIM,串口1
APB1负责DA、USB、SPI、IIC、CAN、串口2345、普通TIM、PWR

四、UART

1、串行通信方式介绍:
同步通信:IIC半双工,SPI全双工异步通信,RS485半双工,RS232全双工
2、串口配置:
(1)串口时钟使能,GPIO时钟使能
(2)串口复位
(3)GPIO:TX-GPIO_Mode_AF_PP;//复用推挽输出,RX-GPIO_Mode_IN_FLOATING;//浮空输入
(4)串口参数:波特率、8个数据位、1个停止位、无奇偶校验位、无硬件数据流控制、收发模式
(5)开启中断并且初始化NVIC
(6)使能串口
(7)编写中断函数
3、USART特点:
(1)全双工
(2)同步操作时,可主机时钟同步,也可从机时钟同步
(3)独立的高精度波特率发生器,不占用定时/计数器
(4)支持5、6、7、8、9位数据位,1或2位停止位的串行数据帧结构
(5)由硬件支持的奇偶校验位发生和检验
(6)数据溢出检测
(7)帧错误检测
(8)包括错误起始位的检测噪声滤波器和数字低通滤波器
(9)三个完全独立的中断,TX发送完成,TX发送数据寄存器空,RX接收完成
(10)支持多机通信模式
(11)支持倍速异步通信

五、IIC

1、IIC在总线传输数据过程中总共有三种类型信号?
(1)开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传输数据
(2)结束信号:SCL为高电平时,SDA由低电平向向高电平跳变,结束传输数据。
(3)应答信号:接收数据的IC在接收到8bit数据时,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号之后,根据实际情况作出是否继续传递信号的判断,若未收到应答信号,由判断为受控单元出现故障
2、IIC配置主机模式端口,该怎么配置?
硬件模式:复用开漏输出,无上下拉(快速模式下,400 Kbit / s)
软件模拟:推挽输出、配置上拉电阻
3、IIC仲裁机制:
简单讲,遵循“低电平优先”原则,即谁先发送低电平谁就掌握对总线的控制权
4、IIC通信速率
硬件模式:是有通信速率设置的
软件模拟:没有设置通信速率,怎么去计算呢?----通过IIC总线位延迟函数IIC_delay()来计算

static void i2c_Delay(void)
{
  uint8_t i;

  /* 
     下面的时间是通过安富莱AX-Pro逻辑分析仪测试得到的。
    CPU主频72MHz时,在内部Flash运行, MDK工程不优化
    循环次数为10时,SCL频率 = 205KHz 
    循环次数为7时,SCL频率 = 347KHz, SCL高电平时间1.5us,SCL低电平时间2.87us 
     循环次数为5时,SCL频率 = 421KHz, SCL高电平时间1.25us,SCL低电平时间2.375us 

    IAR工程编译效率高,不能设置为7
  */
  for (i = 0; i < 10; i++);
}

六、SPI

1、SPI需要几根线?
SPI接口一般使用4根线通信:
MISO主设备数据输入,从设备数据输出。
MOSI主设备数据输出,从设备数据输入;
SCLK时钟信号,由主设备产生。
CS从设备片选信号,由主设备控制
2、SPI通信的四种模式:
这四种工作模式的不同在于 SCLK不同 ,具体工作由CPOL,CPHA决定。
(1)CPOL:(Clock Polarity),时钟极性:
SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:CPOL= 0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候就是高电平,即active_High;CPOL = 1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候就是低电平,就是所谓的active_Low;
(2)CPHA:(Clock Phase),时钟相位
相位,对应着数据采样咋第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。
(3)00/01/10/11四种模式

七、CAN

1、CAN总结介绍一下?
CAN控制器根据 CAN_L 和 CAN_H上 的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者比居其一。发送方通过使总线电平发生变化,将消息发送给接收方。

2、CAN初始化配置步骤?
(1)配置相关引脚的复用功能,使能CAN时钟(2)设置CAN工作模式及波特率等(CAN初始化环回模式,波特率500Kbps )(3)设置滤波器
3、CAN发送数据格式?
CanTxMsg TxMessage;TxMessage.StdId=0x12; // 标准标识符TxMessage.ExtId=0x12; // 设置扩展标示符TxMessage.IDE=CAN_Id_Standard; // 标准帧TxMessage.RTR=CAN_RTR_Data; // 数据帧TxMessage.DLC=len; // 要发送的数据长度 发送8个字节for(i=0;i<len;i++)TxMessage.Data[i]=msg[i]; //数据

八、DMA

1、DMA介绍?
直接存储器存取(DMA) 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。

2、DMA传输模式有几种?
DMA_Mode_Circular 循环模式DMA_Mode_Normal 正常缓存模式,应用场景:GPS、蓝牙,都是用的循环采集,DMA_Mode_Circular模式。

解答:
一个比较重要的函数,获取当前剩余数据量大小,根据设置的接收buff大小减去当前剩余数据量 ,得到当前接收数据大小。

九、中断

1、描述一下中断的处理流程?
(1)初始化中断,设置触发方式是上升沿/下降沿/双沿触发。(2)触发中断,进入中断服务函数
2、STM32的中断控制器支持多少个外部中断?
STM32的中断控制器支持19个外部中断/事件请求:
从图上来看,GPIO 的管脚 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 0 ~ 15。另外四个EXTI线的连接方式如下: ● EXTI线16连接到PVD输出● EXTI线17连接到RTC闹钟事件● EXTI线18连接到USB唤醒事件● EXTI线19连接到以太网唤醒事件(只适用于互 联型产品)中断服务函数列表:
IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数。
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandle
rEXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler

十、时钟源

STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。 
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

十一、ADC

1、STM32的ADC系统功能特性:
(1)12位分辨率
(2)自动校准
(3)可编程数据对齐(转换结果支持左对齐或右对齐方式存储在16位数据寄存器)
(4)单次和连续转换模式

十二、系统时钟

1、简述设置系统时钟的基本流程?
(1)打开HSE,等待就绪后,设置FLASH等待操作。
(2)设置AHB,APB1,APB2分频系数,确定他们与系统时钟的关系
(3)设置CFGR寄存器确定PLL的时钟来源,和倍频系数(HSE 外部 8M*9 = 72MHz)
(4)使能PLL,将系统时钟源切换到PLL

十三、HardFault_Handler处理

1、造成原因?
(1)数组越界操作;
(2)内存溢出,访问越界;
(3)堆栈溢出,程序跑飞;
(4)中断处理错误;

2、处理方式?
(1)在startup_stm32f10x_cl.s里找到HardFault_Handler的地址重映射,并重新编写,让其跳转到HardFaultHandle函数。
(2)打印查看R0、R1、R2、R3、R12、LR、PC、PSR寄存器。
(3) 查看Fault状态寄存器组(SCB->CFSR和SCB->HFSR)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值