c - 我需要使用stm uart模块

标签 c uart stm32f4discovery

我想通过使用以下代码在STM上使用usart通信。 我从网站上获取此代码。有两个缓冲区存储 rx 和 tx 值。 我可以从 tx 缓冲区传输数据,但是当我将 GPIOB10 和 GPIOB11(rx 和 tx 引脚)彼此连接时。 我在 rx 缓冲区中看不到从 tx 缓冲区发送的数据。 你能告诉我我做错了什么吗?

#include "stm32f4xx.h"

char RxBuf[128];     
char TxBuf[128];     
int cntr=0;          
unsigned char WAdr,RAdr; 

void SystemInitt(){
unsigned int i;
      for (i=0;i<0x00100000;i++);       
      RCC->CFGR |= 0x00009400;         
      RCC->CR |= 0x00010000;             
      while (!(RCC->CR & 0x00020000)); 
      RCC->PLLCFGR = 0x07402A04;      
      RCC->CR |= 0x01000000;             
      while(!(RCC->CR & 0x02000000));  
      FLASH->ACR = 0x00000605;         
      RCC->CFGR |= 0x00000002;          
      while ((RCC->CFGR & 0x0000000F) != 0x0000000A);
      RCC->AHB1ENR |= 0x0000001F;     
      GPIOD->MODER  = 0x55550000;     
      GPIOD->OSPEEDR= 0xFFFFFFFF;    
}

void USART3_IRQHandler(){
volatile int Sts;
     Sts=USART3->SR;
     RxBuf[WAdr]=USART3->DR;
     WAdr=(WAdr+1)&0x7F;
     cntr++;
}

void UsartInit()
{
     WAdr=0;RAdr=0;

      RCC->APB1ENR|=0x00040000;    
      RCC->APB1RSTR|=0x00040000;  
      GPIOB->AFR[1]=0x07777700;     
      GPIOB->MODER|=0x2AA00000;    

      RCC->APB1RSTR&=~0x00040000; 
      USART3->BRR=0x1112;               
      USART3->CR1|=0x0000202C;              
      USART3->CR3|=0x80;                
      NVIC->ISER[1]|=0x80;              
}


int main()
{
      volatile int i;
      UsartInit();
      RCC->AHB1ENR |= 0x00200000;        
      RCC->AHB1RSTR|= 0x00200000;        
      for(i=0;i<0x1FF;i++);
      RCC->AHB1RSTR&=~0x00200000;        
      DMA1_Stream4->M0AR=(int)&TxBuf[0]; 
      DMA1_Stream4->PAR=(int)&USART3->DR;
      DMA1_Stream4->FCR&=~0xFFFFFF40;
      DMA1_Stream4->CR=(DMA1_Stream4->CR & 0xF0100000)| 0x0E000440;

      for(i=0;i<128;i++) TxBuf[i]=i+1;  
      DMA1_Stream4->NDTR=50;             
      USART3->SR&=~0x40;                 
      DMA1_Stream4->CR|=1;                

      while(1);
}

最佳答案

谢谢你的建议,但我没有使用cubemx。我使用直接寄存器访问方法

关于c - 我需要使用stm uart模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55849417/

相关文章:

c - 停止执行之前的代码 STM32F4Discovery

spi - STM32f4 SPI DMA接收

c++ - SSE指令中的UnsignedSaturate是什么意思?

fifo - STM32F4 HAL DMA UART TX

Linux UART 比指定的波特率慢

stm32 - PLL时钟配置

我可以依靠 malloc 返回 NULL 吗?

c - *(<类型>*)(<常量>) 是什么意思?

c- 逆波兰表示法计算器错误

c - Intel Galileo 裸机 UART