DMA
1、DMA普通模式和循环模式的区别
循环模式:用于处理一个环形的缓冲区,每轮传输结束时数据传输 的配置会自动地更新为初始状态,DMA传输会连续不断地进行。
普通模式:在DMA传输结束时,DMA通道被自动关闭,进一步的 DMA请求将不被满足。
2、DMA传输需要指定的条件:
传输源:DMA控制器从传输源读出数据;
传输目标:DMA控制器将数据传输的目标;
触发信号:用于触发一次数据传输的动作,执行一个单位的传输源至传输目标的数据传输。可以用来控制传输的启动条件。
ADC
1、STM32的内部温度传感器
STM32内部温度传感器与ADC的通道16相连,与ADC配 合使用实现温度测量。测量范围–40~125℃,精度 ± 1.5℃
操作流程:
1)、设置ADC相关参数
// ADC1 configuration -----------------------------
ADC_InitStructure.ADC_Mode ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel 1;
ADC_Init(ADC1, &ADC_InitStructure);
2)、选中ADC1的通道16作为输入,设置采样时间17.1us ( Ncycle × tADC 17.1靤 )。
// ADC1 regular channel16 Temp Sensor configuration
ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5);
3)、设置寄存器ADC_CR2中的TSVREFE位激活温度传感器
// Enable the temperature sensor and vref internal channel
ADC_TempSensorVrefintCmd(ENABLE);
4)、转换采样值为温度
ADC转换结束以后,读取ADC_DR寄存器中的结果,转换温度值计算公式如下:
V25 - VSENSE
T(℃) ------------ + 25
Avg_Slope
V25: 温度传感器在25℃时 的输出电压,典型值1.43 V。
VSENSE:温度传感器的当前输出电压,与ADC_DR 寄存器中的结果ADC_ConvertedValue之间的转换关系为:
ADC_ConvertedValue * Vdd
VSENSE --------------------------
Vdd_convert_value(0xFFF)
Avg_Slope:温度传感器输出电压和温度的关联参数,典型值4.3 mV/℃。
//Converted Temperature
Vtemp_sensor ADC_ConvertedValue * Vdd / Vdd_convert_value;
Current_Temp (V25 - Vtemp_sensor)/Avg_Slope + 25;
2、VDDA的电压范围
STM32的数据手册规定,VDD与VDDA之间的压差不能大于300mV。ADC的工作电压范围在2.4V~3.6V,供电电压VDD范围在2.0V~3.6V.
1、STM32的USB中断说明
STM32的USB模块可产生三种中断:USB唤醒中断、USB高优先级中断和USB低优先级中断,这三种中断对应事件如下:
1)、USB唤醒中断 - 在中断向量表中的位置是42
这个中断在USB设备从暂停模式唤醒时产生,唤醒事件由USB_ISTR寄存器的WKUP位标识。
2)、USB高优先级中断 - 在中断向量表中的位置是19
这个中断仅由USB同步(Isochronous)模式传输或双缓冲块(Bulk)传输模式下的正确传输事件产生,正确传输事件由USB_ISTR寄存器的CTR位标识。
3)、USB低优先级中断 - 在中断向量表中的位置是20
这个中断由所有其它的USB事件产生,例如正确传输(不包括同步模式和双缓冲块模式)、USB复位等,事件标志位在USB_ISTR寄存器中。
在STM提供的STM32 USB 开发包中的例程包含了上述三种中断的处理方法。例如在USB Speaker例程中,CTR_HP函数处理USB高优先级中断;在所有例子中都有USB_Istr()函数处理USB低优先级中断。
bxCAN
1、CAN波特率的设定计数
Etherne
SPI
1、SPI外设的NSS引脚设置为通用IO口
由于SPI外设的SPI_CR1寄存器中SSM置1时,NSS引脚可被被释放用于GPIO使用,因此无论是在SPI的主模式或是从模式下均可以将NSS引脚释放,由软件或硬件进行NSS管理;
操作流程:
1)、初始化SPI外设,设置NSS由软件管理:
SPI_InitStructure.SPI_NSS SPI_NSS_Soft;
2)、如果NSS引脚用于其他外设时,需要使能NSS输出:
SPI_SSOutputCmd(SPIx, ENABLE);
2、SPI 单线传输
此模式下限制:只能用作输入或者输出,或者工作在半双工模式下。
I2C
USART
Device Signature
1、 STM32F10xxx系列MCU内部含有一个出厂被固化的96bit唯一识别ID,该ID可以用于芯片加密、设备识别等一类特殊应用。
读取该ID的方法:
u32 DevID[3];
DevID[0] *(vu32*)(0x1ffff7e8);
DevID[1] *(vu32*)(0x1ffff7ec);
DevID[2] *(vu32*)(0x1ffff7f0);
数组DevID[3]中即保存了MCU的ID。
注:256K Flash或以上容量的STM32,仅“Z”版本才有,之前的“A”版本没有。
1、STM32对内部Flash的保护措施
所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问 - 写保护和读保护。
1)、读保护即大家通常说的“加密”,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出:
通过调试器(JTAG或SWD);
从RAM中启动并执行的程序;
2)、写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。
读与写设置的效果见下表:
读保护 写保护 对Flash的操作功能
有效 有效 CPU只能读,禁止调试和非法访问。
有效 无效 CPU可以读写,禁止调试和非法访问,页0~3为写保护。
无效 有效 CPU可读,允许调试和非法访问。
无效 无效 CPU可以读写,允许调试和非法访问。
2、当Flash读保护生效时,CPU执行程序可以读受保护的Flash区,但存在两个例外情况:
1)、调试执行程序时;
2)、从RAM启动并执行程序时
STM32还提供了一个特别的保护,即对Flash存储区施加读保护后,即使没有启用写保护,Flash的第 0 ~ 3 页也将处于写保护状态,这是为了防止修改复位或中断向量而跳转到RAM区执行非法程序代码。
3、Flash保护相关函数
FLASH_Unlock(); //Flash解锁
FLASH_ReadOutProtection(DISABLE); //Flash读保护禁止
FLASH_ReadOutProtection(ENABLE); //Flash读保护允许
CRC
1、CRC计算公式
所有的STM32芯片都内置了一个硬件的CRC计算模块,可应用到通信程序中,这个CRC计算模块使用常见的、在以太网中使用的计算多项式:
X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2 + X + 1
写成16进制就是:0x04C11DB7
2、使用这个内置CRC模块操作步骤:
复位CRC模块(设置CRC_CR0x01),这个操作把CRC计算的余数初始化为0xFFFFFFFF
把要计算的数据按每32位分割为一组数据字,并逐个地把这组数据字写入CRC_DR寄存器(既下图中的绿色框)
写完所有的数据字后,就可以从CRC_DR寄存器(既下图中的兰色框)读出计算的结果。
注意:虽然读写操作都是针对CRC_DR寄存器,但实际上是访问的不同物理寄存器。
评论
查看更多