调试时不太容易区分,以下是某次调试中截到的RCC_CSR数据。
6.1.2 电源复位
当以下事件中之一发生时,产生电源复位:
1. 上电/掉电复位(POR/PDR复位)
2. 从待机模式中返回
电源复位将复位除了备份区域外的所有寄存器。(见图3)
图中复位源将最终作用于RESET管脚,并在复位过程中保持低电平。复位入口矢量被固定在地址0x0000_0004。更多细节,参阅表36。
检测可以是否上电/掉电复位可以用以下的函数:
RCC_GetFlagStatus(RCC_FLAG_PORRST)
其中RCC_FLAG_PORRST也可以被替代成以下的一些符号,以检测不同的内容:
**************************************************************************
5. 如果必须要人为地令备份域复位(所有数据都被清零),那么有两种方法:
a) 软件复位(操作RCC_BDCR中的BDRST位产生。);以下是RCC_BDCR中相关的内容:
6.3.9 备份域控制寄存器 (RCC_BDCR)
b) VDD和VBAT均掉电,那么在VDD或都VBAT上电时将引发备分域复位(这是为了保护数据的完整性?)
6. 数据寄存器究竟是哪些呢?
那么在STM32提供的库里又是如何来用这些寄存器的呢?我们找一找,在stm 32f10x_bkp.c中,代码如下:
/**
* @brief Writes user data to the specified Data Backup Register.
* @param BKP_DR: specifies the Data Backup Register.
* This parameter CAN be BKP_DRx where x:[1, 42]
* @param Data: data to write
* @retval None
*/
void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data)
{
__IO uint32_t tmp = 0;
/* Check the parameters */
assert_param(IS_BKP_DR(BKP_DR));
tmp = (uint32_t)BKP_BASE;
tmp += BKP_DR;
*(__IO uint32_t *) tmp = Data;
}
即只需要提供两个参数,第一个是BKP地址,第二个是数据,两个都是16位的数据。第二个参数没有问题,第一个参数如何提供呢?看例子中的代码:
/**
* @brief Writes data Backup DRx registers.
* @param FirstBackupData: data to be written to Backup data registers.
* @retval None
*/
void WriteToBackupReg(uint16_t FirstBackupData)
{
uint32_t index = 0;
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页
本文关键字:手记 嵌入式系统-技术,单片机-工控设备 - 嵌入式系统-技术