- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试创建一个简单的程序来读取 RTC 时钟值并将其打印到串行监视器。 USART 工作正常,但我不知道 RTC 有什么问题。它一直给我在 setuRTC() 中设置的相同值。第二个中断也不起作用。编辑:我正在使用 STM32f1 开发板,与 this 相同
这是我的 RTC 设置:
void setupRTC(void){
RCC->APB1ENR |= (RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN); //Enable the power and backup interface clocks by setting the PWREN and BKPEN bitsin the RCC_APB1ENR register
PWR->CR |= PWR_CR_DBP; //Enable access to the backup registers and the RTC.
RCC->BDCR |= RCC_BDCR_LSEON; //External Low Speed oscillator enable
while((RCC->BDCR & RCC_BDCR_LSERDY) == 0); //Wait until external oscillisator is stabilised
RCC->BDCR |= RCC_BDCR_RTCSEL_LSE;
sendstr(textlse);
RCC->BDCR |= RCC_BDCR_RTCSEL_LSE; //Select Source (LSE oscillator clock used as RTC clock )
RCC->BDCR &= ~((1 << 8) | (1 << 9)); //Unusable clock source, here to prevent warnings, turn off clock sources to RTC.
RCC->BDCR = RCC_BDCR_RTCEN; //RTC clock enable
RTC->CRL &= ~RTC_CRL_RSF; //Clear registers Synchronized Flag
while(!(RTC->CRL & RTC_CRL_RSF)); //Wait for the RSF bit in RTC_CRL to be set by hardware
while((RTC->CRL & RTC_CRL_RTOFF) == 0); //Wait for RTOFF It is not possible to write to the RTC_CR register while the peripheral is completing a previous write operation
RTC->CRL |= RTC_CRL_CNF; //Set the CNF bit to enter configuration mode
/* Set RTC COUNTER MSB word */
RTC->CNTH = (12*3600 + 40*60 + 00) >> 16; //Random time
/* Set RTC COUNTER LSB word */
RTC->CNTL = ((12*3600 + 40*60 + 00)& 0x0000FFFF);
RTC->CRH |= RTC_CRH_SECIE; //Second Interrupt Enable
RTC->CRL &= ~RTC_CRL_CNF; //Exit configuration mode
while((RTC->CRL & RTC_CRL_RTOFF) == 0); //Wait for RTOFF
sendstr(textconf);
}
这是整个程序:
#include "stm32f10x.h"
#include <stdio.h>
uint8_t text[] = {"\nSTM32 USART test ä ö \n"};
uint8_t textlse[] = {"LSE ready\n"};
uint8_t textconf[] = {"Configuration complete\n"};
char str[32]; // buffer for text
uint8_t RxBuffer[1024];
int rxcount = 0;
// Private function prototypes
void sendstr(uint8_t * str);
void sendChar(uint8_t ch);
void sendTime(uint32_t ch);
void setupRTC(void);
void setupUSART(void);
u32 rtc_get_counter_val(void);
void setupRTC(void){
RCC->APB1ENR |= (RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN); //Enable the power and backup interface clocks by setting the PWREN and BKPEN bitsin the RCC_APB1ENR register
PWR->CR |= PWR_CR_DBP; //Enable access to the backup registers and the RTC.
RCC->BDCR |= RCC_BDCR_LSEON; //External Low Speed oscillator enable
while((RCC->BDCR & RCC_BDCR_LSERDY) == 0); //Wait until external oscillisator is stabilised
RCC->BDCR |= RCC_BDCR_RTCSEL_LSE;
sendstr(textlse);
RCC->BDCR |= RCC_BDCR_RTCSEL_LSE; //Select Source (LSE oscillator clock used as RTC clock )
RCC->BDCR &= ~((1 << 8) | (1 << 9)); //Unusable clock source, here to prevent warnings, turn off clock sources to RTC.
RCC->BDCR = RCC_BDCR_RTCEN; //RTC clock enable
RTC->CRL &= ~RTC_CRL_RSF; //Clear registers Synchronized Flag
while(!(RTC->CRL & RTC_CRL_RSF)); //Wait for the RSF bit in RTC_CRL to be set by hardware
while((RTC->CRL & RTC_CRL_RTOFF) == 0); //Wait for RTOFF It is not possible to write to the RTC_CR register while the peripheral is completing a previous write operation
RTC->CRL |= RTC_CRL_CNF; //Set the CNF bit to enter configuration mode
/* Set RTC COUNTER MSB word */
RTC->CNTH = (12*3600 + 40*60 + 00) >> 16; //Random time
/* Set RTC COUNTER LSB word */
RTC->CNTL = ((12*3600 + 40*60 + 00)& 0x0000FFFF);
RTC->CRH |= RTC_CRH_SECIE; //Second Interrupt Enable
RTC->CRL &= ~RTC_CRL_CNF; //Exit configuration mode
while((RTC->CRL & RTC_CRL_RTOFF) == 0); //Wait for RTOFF
sendstr(textconf);
}
void setupUSART(void){
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN;
USART1->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
USART1->BRR = (SystemCoreClock / 115200);
GPIOA->CRH &= 0xFFFFF00F; //Set RX(PA10) and TX(PA9) pins
GPIOA->CRH |= 0x000008A0; //In TTL communication, TX pin must be conficured as pushpull
NVIC_EnableIRQ(USART1_IRQn);
USART1->CR1 |= USART_CR1_RXNEIE; //Enable USART interrupt
}
int main(void)
{
vu32 dly;
uint32_t time;
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; //Enable clock for PC pins
GPIOC->CRL &= 0x00FFFFFF; //Setup PC6 and PC6 leds
GPIOC->CRL |= 0x33000000;
setupUSART();
setupRTC();
sendstr(text);
while (1)
{
time = rtc_get_counter_val();
sprintf(str, "%10d\n", time);
sendstr(str);
for(dly = 0; dly < 1000000; dly++);
}
}
void sendChar(uint8_t ch){
while(!(USART1->SR & USART_SR_TXE));
USART1->DR = ch;
}
void sendTime(uint32_t ch){
while(!(USART1->SR & USART_SR_TXE));
USART1->DR = ch;
}
void sendstr(uint8_t * str){
while(*str != 0){
sendChar(*str);
str++;
}
}
void USART1_IRQHandler(void){
if(USART1->SR & 0x0020){ //content of the shift register is transferred to the RDR RXNE bit.
GPIOC->BSRR = (1 << 7);
RxBuffer[rxcount++] = (uint8_t)(USART1->DR & (uint8_t)USART_DR_DR);
USART1->SR = (uint16_t)~0x0020;
sendstr(RxBuffer);
}
}
void RTC_IRQHandler(void){
if(RTC->CRL & RTC_CRL_SECF){
GPIOC->BSRR = (1 << 7);
RTC->CRL &= ~RTC_CRL_SECF;
}
}
u32 rtc_get_counter_val(void)
{
return (RTC->CNTH << 16) | RTC->CNTL;
}
最佳答案
可能为时已晚,但问题是您没有为 RTC 设置任何时钟源。
需要交换以下行,来自:
RCC->BDCR |= RCC_BDCR_RTCSEL_LSE;
RCC->BDCR &= ~((1 << 8) | (1 << 9));
到:
RCC->BDCR &= ~((1 << 8) | (1 << 9));
RCC->BDCR |= RCC_BDCR_RTCSEL_LSE;
第一次正确设置时钟源之前的方式,然后再次清除位,使 RTC 没有时钟。
关于c++ - 无法让 RTC 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16468978/
我不小心 checkin 了变更集中的一些变更,我不想交付它们。 如何在 RTC 中将待定变更集的变更移动到 Unresolved 变更? 最佳答案 通常的选项是“discard”,但这会删除更改(它
我不小心交付了更改集,其中包括一些在 RTC 中具有本地系统特定配置的附加配置文件。有没有办法在交付后丢弃这些更改?我的意思是这些更改不应该作为其他团队成员的传入更改。 如果有,请提供任何指针。 最佳
在 SVN 中,我们有一个选项可以下载特定版本的代码。这提供了下载旧版本代码的灵活性,也用于构建。 RTC 中是否有选项可以下载特定版本的代码? 最佳答案 是的:一旦你在流上完成了一个 repo 工作
我想根据给定日期现有流的状态创建一个新流。为此,似乎合乎逻辑的做法是在过去的日期/时间在源流中创建基线,但我还没有找到一种方法来做到这一点。 除了组件/流的当前状态之外,是否可以在任何时间创建基线或快
我从本地源目录中删除了一个文件和包,我正在尝试使用 RTC 替换它。当我查看“待定更改”时,该文件没有出现以便再次添加。此外,当我右键单击项目并选择“比较”时,没有选项可以与存储库中的最新版本进行比较
如何获取 RTC 工作项的原始记录版本值。 不是当前版本,而是记录 RTC 项目的原始版本。 假设当前版本是 2.0 但原始 RTC 项目是针对 1.0 记录的。我需要版本的最后一个值是 1.0。 注
我有一个存储库工作区,它有一个默认的流目标。我想编辑流目标并使其仅适用于少数组件。这可以从 RTC Eclipse 客户端实现。如何从 RTC 命令行界面实现相同的目的。请引用RTC 3.0.1.3告
如何从 RTC workItem 中读取历史记录。我想在更改表单历史记录之前和之后检查一些属性更改及其值。通过爵士 API。这怎么可能?请帮忙 。 最佳答案 Ragarding属性,你可以在“Work
IBM 有这个 200+ Mb 的大型 Eclipse 插件,我可以在其中访问 Eclipse 的所有内容和所有功能。 是否有一个更小更轻量级的 Eclipse 插件可用,它可以访问开发人员需要的信息
RTC 中的“项目范围”可见性是什么? 这是否意味着项目区域的成员可以查看此流或工作区? 最佳答案 当您创建一个 repo 工作区时,您可以选择“project scoped”,以便项目区域的成员能够
我在 Windows 2008 服务器上安装了(基本设置)RTC 3.0.1。设置顺利通过,一切看起来都是“绿色”的。但是,当我导航到项目区域以创建一个新项目区域时,出现以下错误消息: The ser
任何人都可以使用 oslc 或 REST 调用帮助我获取其中的迭代和冲刺列表以及该冲刺中的工作项 最佳答案 This thread报告查询迭代可能有点棘手: For the purpose of ob
我正在使用 RTC, 我的 friend 提交了他们的更改集以供审核,我是审核者。我在任何地方都找不到他们的变更集。 最佳答案 This thread总结过程: 项目配置: Precondition
我正在基于 http://jazz.net 中提供的研讨会开发 IBM RTC Advisors。 . 现在我正在尝试将其 OSGi 模块中提供的 xsd 文档移植到注释+jaxb。 这是 XSD 的
我正在寻找一个查询或一种方法来定义我自己的查询或方法来搜索提及特定用户的所有工作项。我该怎么做? 最佳答案 这取决于你所说的“提及”是什么意思。 您可以对属性“全文”进行简单查询,以获取代表您的用户的
我是 RTC 的新手,所以我需要一个尽可能简单的答案。 我最近接受了另一个团队成员的变更集,我需要从我的工作区中丢弃该变更集。我这里的问题是我接受的变更集没有交付,它仍在等待审查批准。如果我放弃变更集
如果我有两个开发流(称为Stream1,Stream2),并且我想将这两个流合并为一个流。 目前,这是我的操作方式: 创建一个新的Stream-Stream3。流3将包含Stream1和Stream2
我在 RTC 中有一个文件(称为 foo.c),我修改了该文件并将其与其他一些更改一起 checkin 变更集 (CS1)。然后,我再次修改该文件,并将其与其他更改一起 checkin 不同的变更集
问题 嗨,我使用以下表单重新混合了网络框架动态房间的模板: https://glitch.com/edit/#!/power-lily-pancake?path=public%2Fscene.html
我正在将 STM32F072ZB 运行到待机模式。 MCU 大部分时间都处于休眠状态(每 1 小时唤醒一次以读取传感器)。由于看门狗正在运行,因此我使用 RTC 每 25 秒生成一次警报(看门狗周期约
我是一名优秀的程序员,十分优秀!