煩躁-->放任自由-->心平氣和,我今天晚上的最后一分鐘,終于將它搞定了!    &..."/>
溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

stm32f103的串口通信之串口輪詢實(shí)驗(yàn)

發(fā)布時(shí)間:2020-06-17 21:03:37 來(lái)源:網(wǎng)絡(luò) 閱讀:6992 作者:韓A 欄目:編程語(yǔ)言

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

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

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

     如下是完整代碼;
     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[]來(lái)自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



輪詢實(shí)現(xiàn).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,因?yàn)榇撕瘮?shù)是一個(gè)異步中斷函數(shù);
} 
	
	
	第一次寫技術(shù)博客,與君共勉,愿能助君一臂之力。
	在串口方面的學(xué)問(wèn)很深,以后需要虛心安心鉆研!
	
	每日弟子規(guī):
	
	弟子規(guī),圣人訓(xùn),首孝悌,次謹(jǐn)信
	泛愛(ài)眾,而親仁,有余力,則學(xué)文
	
	自己還不夠博愛(ài),不夠自信,唯有多行善事,才能自信滿滿,才可神采飛揚(yáng),我很期待那一天;
	自己的努力的第一天!
	加油!


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI