stm 32 f 103のシリアル通信のシリアルポーリング実験


二日間の苦しい戦いを経て、心が穏やかになりました.
      まず問題を述べます.usart.cファイルの中で中断された部分を注釈してからポーリングモードを使ってシリアル通信をしますが、この過程で発生した問題は最初の文字しか表示できません.
     まず理由を説明します.ポーリングモードを使う時、遅延関数を使わないでください.
            ;
     main.c
#include "stm32f10x.h"
#include "delay.h"
#include "lcd.h"
#include 
#include "usart.h"
#include "circular_buffer.h"

//function declaration;
void system_isruning(void);
void str_array_init(u8 a[], int len);

int main()
{
	

	int j = 0;
  delay_init();
	lcd_init();
  USART1_Configuration();
	
	for(j = 0; j APB2ENR |= 1 <CRH &= 0xFFFFFFF0;
	GPIOD ->CRH |= 0x00000003;
	
  GPIOD ->ODR &= ~(1<<8);
	delay_ms(100);
	GPIOD ->ODR |= (1<<8);
	delay_ms(100);
	
}


     :

#ifndef CIRCULAR_BUFFER_H
#define CIRCULAR_BUFFER_H

#include "sys.h"
#define  BUF_LEN  100

void is_recevied(void);


static u8 m_buf[BUF_LEN];
static int i = 0;

#endif



    .c

#include "circular_buffer.h"
#include "sys.h"
#include "stm32f10x_usart.h"
#include 
#include "delay.h"


void is_recevied(void)
{
	 u8 x =  0;

       while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)  != RESET)   
	{
  		 x = USART_ReceiveData(USART1);
       USART_SendData(USART1, x); 
		  // save into the receive buffer;
		  i = i % BUF_LEN;  //
		  m_buf[i] = x;
		  i++;
      //printf("received one data! x == %c 
",x);       // printf, ; }  , , 。 , ! : , , , , , , , , , , , ; ! !