从51开始,单片机玩了很长时间了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直没有开始,原因 -----不知道玩了ARM可以做什么(对我自己而言)。如果为学习而学习,肯定学不好。然后cortex-m3出来了,据说,这东西可以替代单片机,于 是马上开始关注。也在第一时间开始学习,可惜一开始就有点站错了队,选错了型(仍是对我自己而言)。我希望这种芯片应该是满大街都是,随便哪里都可以买得 到,但我选的第一种显然做不到。为此,大概浪费了一年多时间吧,现在,回到对我来说是正确的道路上来啦,边学边写点东西。
闲话多了些,就权当前言了。下面准备开始。
STM32单片机小TIps之RTC实践
BKP还没有搞完,怎么又换到了RTC上了,因为RTC和BKP有些联系,想不关联还不行呢。
以下是数据手册上有关RTC的介绍:
******介绍开始
15.1 RTC 简介
实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位或从待机模式唤醒后RTC的设置和时间维持不变。
系统复位后,禁止访问后备寄存器和RTC,防止对后备区域(BKP)的意外写操作。执行以下操作使能对后备寄存器和RTC的访问:
● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位来使能电源和后备接口时钟
● 设置寄存器PWR_CR的DBP位使能对后备寄存器和RTC的访问。
******介绍结束
下面就以库中所带的实例来玩这个RTC,正好也要解决TAMPER引脚的问题。
这次要用到的例子是这个:
有关配置没有什么可多说的,把上一个例子:BKP-》Backup_Data中修改过的:
stm32_eval.c
stm3210e_eval.h
stm32_eval.h
三个文件复制过来,建立工程,一路顺风,非常顺利地编译、链接好,然后进入调试,结果,出问题了,见下面:
进入调试界面即停在了反汇编界面。一旦执行程序,立即就停下来。这个BKPT指令是个什么东西呢?查了一下指令表,原来是个断点指令,那为什么会停止在这里呢?万能的网啊,一搜就出来了,感谢前人的努力,感谢伟大的网。..。
结论是:“ 凡是用到printf的都会出现这样的问题。”
解决方法:
打开OpTIons for Target项,把那个Use MicroLIB前面打上勾,重新编译链接即可。
出现问题的原因,网上的相关解释是:这是Printf库函数的问题,需要使用MicroLIB这个库来替代默认的库。原因是默认printf并非使用串口,所以要改掉。
在main.c中有这样一段函数:
/**
* @brief Retargets the C library printf funcTIon to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementaTIon of fputc here */
/* e.g. write a character to the USART */
USART_SendData(EVAL_COM1, (uint8_t) ch);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
{}
return ch;
}
根据这段函数的说明,就是做这个事情的。
技术专区
- 低成本开发系统现在正处于物联网期望膨胀峰值期
- 因特尔Cyclone 10 LP FPGA评估板电路图集及PCB装配图
- 采用32位MCU系列对新型无磁水表设计
- 一个嵌入式或者X86的工业控制板上,少不了CAN口!
- 以MSP432主机微控制器的软件与硬件集成解决方案