溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

stm32f103的串口通信之串口輪詢實驗

發布時間:2020-06-17 21:03:37 來源:網絡 閱讀:7032 作者:韓A 欄目:編程語言

     經過兩天的艱苦戰斗,經歷了心平氣和-->煩躁-->放任自由-->心平氣和,我今天晚上的最后一分鐘,終于將它搞定了!

      首先闡述問題:在把usart.c文件里有關中斷的部分注釋掉以后,使用輪詢模式進行串口通訊,但是在這過程中,遇到的問題是只能顯示第一個字符;

     首先說明原因:在使用輪詢模式時,不要使用延時函數,也不要使用中斷,如使用printf()這樣的函數;

     如下是完整代碼;
     main.c
#include "stm32f10x.h"
#include "delay.h"
#include "lcd.h"
#include <stdio.h>
#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 < 100; j++)
	{
   		m_buf[i] = '\0';   //m_buf[]來自circular_buffer.h;
	}

	while(1)
	{
		//system_isruning();
		is_recevied();
		//delay_ms(1000);
		//LCD1602_WriteString(str,2);
  }
}




void system_isruning(void)
{
	RCC->APB2ENR |= 1 << 5;
	GPIOD ->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 <stdio.h>
#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 \n",x);
      //使用輪詢模式不能使用printf,因為此函數是一個異步中斷函數;
} 
	
	
	第一次寫技術博客,與君共勉,愿能助君一臂之力。
	在串口方面的學問很深,以后需要虛心安心鉆研!
	
	每日弟子規:
	
	弟子規,圣人訓,首孝悌,次謹信
	泛愛眾,而親仁,有余力,則學文
	
	自己還不夠博愛,不夠自信,唯有多行善事,才能自信滿滿,才可神采飛揚,我很期待那一天;
	自己的努力的第一天!
	加油!


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女