首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在STM32F0中没有设置

在STM32F0中没有设置
EN

Stack Overflow用户
提问于 2015-04-17 02:06:25
回答 2查看 2.4K关注 0票数 1

我有STM32F0DISCOVERY板和STM32F051R8T6微控制器。我正在尝试使用USART与PC进行通信。

将数据从板发送到PC机与我的putChar()功能很好。

从PC机接收数据,getChar()函数发送到板上,没有正常工作。问题是,RXNE标志( Register空)没有被设置为。但是,我已经看到在Keil uVision4中使用调试器时,数据确实在RDR (接收数据寄存器)中。

我尝试过在没有调试的情况下运行它,以防调试器在我的程序读取RXNE标志之前读取RDR寄存器,但它仍然不能工作。

这是我的密码:

代码语言:javascript
复制
#include <STM32F0xx.h>
uint8_t data;

int main (void) {

    RCC->AHBENR |= (1UL<<17);   // PortA clock enable
    GPIOA->MODER &= ~((3UL<<2*2)|(3UL<<2*3));
    GPIOA->MODER |=  ((2UL<<2*2)|(2UL<<2*3));       // Alt func on PA2, PA3
    GPIOA->AFR[0] &= ~((15UL<<4*2)|(15UL<<4*2));
    GPIOA->AFR[0] |=  (( 1UL<<4*2)|( 1UL<<4*3));    // Alt func 1 on PA2, PA3
    RCC->APB1ENR |= (1UL<<17);  // USART clock enable
    USART2->BRR = 5000;         // Baud rate 48 000 000 / BRR -> 9600
    USART2->CR1 |= (1UL<<0);    // Enable USART

    while (1) {
        data = getChar();
        if (data!=0xFF) {
            putChar(data);
        }
    }
}

下面是正常工作的putChar()函数。

代码语言:javascript
复制
void putChar (uint8_t data) {
    USART2->CR1 |= (1UL<<3); // Transmitter enable
    USART2->TDR = data;
    while ((USART2->ISR|(1UL<<7))==(1UL<<7));   // Wait until sent
}

下面是不工作的getChar()函数,它一直在返回0xFF

代码语言:javascript
复制
uint8_t getChar (void) {
    USART2->CR1 |= (1UL<<2); // Receiver enable
    if ((USART2->ISR|(1UL<<5))==(1UL<<5)) { // Check RXNE to see if there is data
        return USART2->RDR;
    } else {
        return 0xFF;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-18 22:08:37

您没有正确地检查RXNE位。代码的这一行是错误的:

代码语言:javascript
复制
if ((USART2->ISR|(1UL<<5))==(1UL<<5)) {

您需要使用AND而不是OR。这将允许您正确掩蔽并检查是否设置了位。用这个代替:

代码语言:javascript
复制
if ((USART2->ISR&(1UL<<5))==(1UL<<5)) {
票数 0
EN

Stack Overflow用户

发布于 2020-08-05 10:36:28

在这种情况下,您将检查位的默认状态。检查它,如果数据在那里,如果没有数据,那么它就进入如果条件的话,把你的代码放进去。

代码语言:javascript
复制
if ((USART2->ISR&(1UL<<5))==(1UL<<5)) {

} else {
    /***** operations *****/
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29688996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档