【问题标题】:STM32F103C8 not receiving uart data from PC?STM32F103C8没有从PC接收到uart数据?
【发布时间】:2021-02-05 10:28:35
【问题描述】:

现在我正在使用 STM32F103C8 蓝色药丸板,我正在使用 UART 协议在这里我能够将数据发送到正在工作的腻子,但将数据从腻子发送到微控制器(无法从腻子接收数据)。什么问题我无法理解一切正常但我无法接收数据?

代码:

#include "stm32f10x.h"                  // Device header
volatile char data;
int main(void){
    //configure HSI SYSTEM clock .
    RCC->CR = RCC_CR_HSION;
    RCC->CFGR = RCC_CFGR_SW_HSI;
    //Enable Alternate function clock, PORTA and USART1.
    RCC->APB2ENR = RCC_APB2ENR_AFIOEN|RCC_APB2ENR_USART1EN|RCC_APB2ENR_IOPAEN;
    //Alternate function mode PA9
    GPIOA->CRH = GPIO_CRH_MODE9_1|GPIO_CRH_CNF9_1;
   //ALternate function mode PA10.
    GPIOA->CRH |= GPIO_CRH_MODE10_1|GPIO_CRH_CNF10_1;
   //USART1 Enable.
    USART1->CR1 = USART_CR1_UE;
   //8-bit word length.
    USART1->CR1 |= ~(USART_CR1_M);
   //baudrate 8MHz,9600 baudrate.
    USART1->BRR = 0x341;
   //Enable TE,RE bits
    USART1->CR1 |= USART_CR1_RE|USART_CR1_TE;
    
    while(1){
        //wait for receive data
        while((USART1->SR &USART_SR_RXNE )==0){}
            data = USART1->DR;
        while((USART1->SR & USART_SR_TXE)== 0){}
            USART1->DR = data;
        while((USART1->SR &USART_SR_TC) == 0){}
        }
this code receives data from the PC and sends data to the PC.

【问题讨论】:

  • 是什么让您认为问题与代码有关,而不是与硬件有关?您是否使用示波器验证了 Rx 信号?
  • 代码一切都在keilMDK-5的模拟模式下工作,它正在接收字符并发送到Keil的uart终端。一切都很好,但在硬件上不工作我已经检查过 tx 和 Rx 线也没有问题。它被发送到 pc 但没有从 pc 接收。
  • 模拟器没什么用,你得用示波器。

标签: c


【解决方案1】:

我得到了上述问题的解决方案。

  1. 在接收数据时不要将 GPIO 引脚设置为备用功能模式。 //备用功能模式 PA10. GPIOA->CRH |= GPIO_CRH_MODE10_1|GPIO_CRH_CNF10_1; 这里 RX 引脚在复用功能中作为输出推挽模式 --- 这是错误的。
  2. 将此引脚设置为输入浮动模式或输入推挽/下拉模式-如果您从PC接收数据是正确的。(根据用户手册)。 3.不要为此使用HSI时钟,如果您使用此板上的HSI时钟会得到错误的数据。HSI时钟,不是一个好主意。
  3. 确保启用 HSE 时钟作为系统时钟,当您从 PC 接收数据时,您将获得正确的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多