亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? STM32的GPIO口模擬串口通信
?? C
字號:
/*
*********************************************************************************************************
*	                                  
*	模塊名稱 : 主程序模塊。
*	文件名稱 : main.c
*	版    本 : V1.0
*	說    明 : ADC采樣和濾波例程。
*	修改記錄 :
*		版本號  日期       作者    說明
*		v1.0    2012-11-12 armfly  ST固件庫V3.5.0版本。

*
*	Copyright (C), 2010-2011, 安富萊電子 www.armfly.com
*
*********************************************************************************************************
*/

#include "stm32f10x.h"		/* 如果要用ST的固件庫,必須包含這個文件 */
#include <stdio.h>			/* 因為用到了printf函數,所以必須包含這個文件 */

/* 定義例程名和例程發布日期 */					
#define EXAMPLE_NAME	"GPIO口模擬串口"
#define EXAMPLE_DATE	"2012-11-12"
#define DEMO_VER		"1.0"

#define TXD_high()		GPIO_SetBits(GPIOA, GPIO_Pin_9)
#define TXD_low()		GPIO_ResetBits(GPIOA, GPIO_Pin_9)

#define BaudRateUsed	9600

#define SendingDelay	104

/* 僅允許本文件內調用的函數聲明 */
static void PrintfLogo(void);
static void GPIO_Configuration(void);
static void Delay_Ms(__IO uint32_t nTime);
static void EXTI_Configuration(void);
static void TIM1_Configuration(void);
static void TIM2_Configuration(void);
static void TIM3_Configuration(void);
static void PrintfAnswer(void);

/* 外部文件可以調用的函數聲明 */
void SendOneByte(uint8_t datatoSend);

__IO uint32_t TimingDelay;
uint8_t dataReceived[100];
uint8_t Logo[]={"Hello, C!\r\n"};
__IO uint8_t receivedFlag;
__IO uint8_t receivedNum, tmpreceivedNum;



uint16_t g_usAdcValue;	/* ADC 采樣值的平均值 */

/*
*********************************************************************************************************
*	函 數 名: main
*	功能說明: c程序入口
*	形    參:無
*	返 回 值: 錯誤代碼(無需處理)
*********************************************************************************************************
*/
int main(void)
{
	/* 
		由于ST固件庫的啟動文件已經執行了CPU系統時鐘的初始化,所以不必再次重復配置系統時鐘。
		啟動文件配置了CPU主時鐘頻率、內部Flash訪問速度和可選的外部SRAM FSMC初始化。
		
		系統時鐘缺省配置為72MHz,如果需要更改,可以修改:
		\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
		中配置系統時鐘的宏。
	*/

	uint8_t i;

	/* IO配置 */
	GPIO_Configuration();

	/* 配置外部中斷 */
	EXTI_Configuration();

	/* TIM1初始化,用于接收 */
	TIM1_Configuration();

	/* TIM2初始化,用于判斷數據是否接收完成 */
	TIM2_Configuration();

	/* TIM3初始化,用于發送 */
	TIM3_Configuration();


	/* 直接調用模擬串口發送函數 */
	SendOneByte('H');	
	SendOneByte('e');
	SendOneByte('l');
	SendOneByte('l');
	SendOneByte('o');
	SendOneByte(',');
	SendOneByte('C');
	SendOneByte('!');
	SendOneByte('\r');
	SendOneByte('\n');

	/* 打印例程Logo,間接調用模擬串口發送函數 */
	PrintfLogo();	
	

	/* 進入主程序循環體 */
	while (1)
	{

		if(receivedFlag)
		{
			/* 清除接收完成標志位 */
			receivedFlag = 0;

			/* 返回接收到的數據 */
			for(i = 0; i < tmpreceivedNum; i++)
				SendOneByte(dataReceived[i]);

			/* 清空接收緩存 */
			for(i = 0; i < tmpreceivedNum; i++)
				dataReceived[i] = 0;

			/* 返回模擬對話數據 */
			PrintfAnswer();

			/* 接收數據長度清零 */
			tmpreceivedNum = 0;
		}

	}
}

/*
*********************************************************************************************************
*	函 數 名: GPIO_Configuration
*	功能說明: 配置PA9為TXD,PA10做RXD
*	形    參:無
*	返 回 值: 無
*********************************************************************************************************
*/
static void GPIO_Configuration(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

    /* 使能 GPIOA clock */
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);

	/* 防止上電后的誤判 */
	GPIO_SetBits(GPIOA, GPIO_Pin_9);

	/* 配置PA9為推挽輸出 */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	/* 配置PA10為浮空輸入 */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

}

/*
*********************************************************************************************************
*	函 數 名: EXTI_Configuration
*	功能說明: 配置PA10上的下降沿觸發外部中斷
*	形    參:無
*	返 回 值: 無
*********************************************************************************************************
*/
static void EXTI_Configuration(void)
{
  	EXTI_InitTypeDef EXTI_InitStructure;
  	NVIC_InitTypeDef NVIC_InitStructure;

	/* Enable the AFIO Clock */
  	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);

    /* Configure Button EXTI line */
    EXTI_InitStructure.EXTI_Line = EXTI_Line10;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

    /* Enable and set Button EXTI Interrupt to the lowest priority */
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure); 
}

/*
*********************************************************************************************************
*	函 數 名: TIM1_Configuration
*	功能說明: 配置TIM1
*	形    參:無
*	返 回 值: 無
*********************************************************************************************************
*/
static void TIM1_Configuration(void)
{
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

  	/* Time base configuration */
  	TIM_TimeBaseStructure.TIM_Period = SendingDelay -1;
  	TIM_TimeBaseStructure.TIM_Prescaler = 72-1;
 	TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);


	TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update);
	
	/* 開啟TIM1的中斷 */
    TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);     
        

    /* 選擇TIM2的中斷通道 */
    NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;      
    
	/* 搶占式中斷優先級設置為0 */
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    
	/* 響應式中斷優先級設置為0 */
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    
	/* 使能中斷 */
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}


/*
*********************************************************************************************************
*	函 數 名: TIM2_Configuration
*	功能說明: 配置TIM1
*	形    參:無
*	返 回 值: 無
*********************************************************************************************************
*/
static void TIM2_Configuration(void)
{
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

  	/* Time base configuration */
  	TIM_TimeBaseStructure.TIM_Period = 1000 - 1;
  	TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
 	TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

	TIM_ClearITPendingBit(TIM2, TIM_FLAG_Update);
	
	/* 開啟TIM1的中斷 */
    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);      
        
    /* 選擇TIM2的中斷通道 */
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;      
    
	/* 搶占式中斷優先級設置為0 */
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    
	/* 響應式中斷優先級設置為0 */
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    
	/* 使能中斷 */
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

/*
*********************************************************************************************************
*	函 數 名: TIM3_Configuration
*	功能說明: 配置TIM1
*	形    參:無
*	返 回 值: 無
*********************************************************************************************************
*/
static void TIM3_Configuration(void)
{
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

  	/* Time base configuration */
  	TIM_TimeBaseStructure.TIM_Period = 65535 - 1;
  	TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
 	TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
	TIM_Cmd(TIM3,ENABLE);    

}

/*
*********************************************************************************************************
*	函 數 名: Delay_Ms
*	功能說明: 延時
*	形    參:nTime,單位為uS*	返 回 值: 無
*********************************************************************************************************
*/
void Delay_Ms(__IO uint32_t nTime)
{ 

	uint16_t tmp;

	tmp = TIM_GetCounter(TIM3);
	
	if(tmp + nTime <= 65535)
		while( (TIM_GetCounter(TIM3) - tmp) < nTime );
	else
	{
		TIM_SetCounter(TIM3, 0);
		while( TIM_GetCounter(TIM3) < nTime );
	}
			
}

/*
*********************************************************************************************************
*	函 數 名: SendOneByte
*	功能說明: 模擬串口發送一字節數據
*	形    參:無
*	返 回 值: 無
*********************************************************************************************************
*/
void SendOneByte(uint8_t datatoSend)
{
	uint8_t i, tmp;

	/* Start bit */
	TXD_low();
	Delay_Ms(SendingDelay);	

	for(i = 0; i < 8; i++)
	{
		tmp	= (datatoSend >> i) & 0x01;

		if(tmp == 0)
		{
			TXD_low();
			Delay_Ms(SendingDelay);	//0		
		}
		else
		{
			TXD_high();
			Delay_Ms(SendingDelay);	//1		
		}	
	}
	
	/* Stop bit */
	TXD_high();
	Delay_Ms(SendingDelay);	
}

/*
*********************************************************************************************************
*	函 數 名: PrintfLogo
*	功能說明: 打印例程名稱和例程發布日期, 接上串口線后,打開PC機的超級終端軟件可以觀察結果
*	形    參:無
*	返 回 值: 無
*********************************************************************************************************
*/
static void PrintfLogo(void)
{
	printf("*************************************************************\r\n");
	printf("* 例程名稱   : %s\r\n", EXAMPLE_NAME);	/* 打印例程名稱 */
	printf("* 例程版本   : %s\r\n", DEMO_VER);		/* 打印例程版本 */
	printf("* 發布日期   : %s\r\n", EXAMPLE_DATE);	/* 打印例程日期 */

	/* 打印ST固件庫版本,這3個定義宏在stm32f10x.h文件中 */
	printf("* 固件庫版本 : %d.%d.%d\r\n", __STM32F10X_STDPERIPH_VERSION_MAIN,
			__STM32F10X_STDPERIPH_VERSION_SUB1,__STM32F10X_STDPERIPH_VERSION_SUB2);		
	printf("* \n\r");	/* 打印一行空格 */
	printf("* QQ    : 1295744630 \r\n");
	printf("* Email : armfly@qq.com \r\n");
	printf("* Copyright www.armfly.com 安富萊電子\r\n");
	printf("*************************************************************\r\n");
	printf("請通過串口調試助手發送數據,本例程會將這些數據通過串口原樣返回。\r\n\r\n");
}

/*
*********************************************************************************************************
*	函 數 名: PrintfLogo
*	功能說明: 隨機打印模擬對話
*	形    參:無
*	返 回 值: 無
*********************************************************************************************************
*/
static void PrintfAnswer(void)
{
	uint16_t tmp;

	tmp = TIM_GetCounter(TIM3);

	switch(tmp % 9)
	{
		case 0:
			printf("\r\n--雷工,數據已悉數返回,掰掰手指頭,有未丟?\r\n");
			break;

		case 1:
			printf("\r\n--報告雷工,我的工作完了,輪到你檢查了!\r\n");
			break;

		case 2:
			printf("\r\n--咦,還沒有錯?\r\n");
			break;

		case 3:
			printf("\r\n--靠,還不出錯?\r\n");
			break;

		case 4:
			printf("\r\n--雷工,要不,再試試?\r\n");
			break;

		case 5:
			printf("\r\n--小雷,檢查過沒有,數據對不對?\r\n");
			break;

		case 6:
			printf("\r\n--小雷,數據對不對?\r\n");
			break;

		case 7:
			printf("\r\n--怎么樣,小雷,驗收通過了沒?\r\n");
			break;

		case 8:
			printf("\r\n--小雷,我的支付寶是168 168 168 168\r\n");
			break;

		default:
			printf("\r\n--這句不可能出現在屏幕上\r\n");
			break;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区视频在线观看2022 | 国产亚洲欧美色| 亚洲蜜臀av乱码久久精品| 蜜乳av一区二区三区| 国产精品久久久久久久第一福利| 日本91福利区| 欧美唯美清纯偷拍| 亚洲视频免费观看| 国产精品一级片在线观看| 91麻豆精品国产91久久久久久 | 日韩av不卡一区二区| 91伊人久久大香线蕉| 久久久久久久久久久久久久久99| 日韩国产欧美在线播放| 91久久精品国产91性色tv| 中文字幕高清一区| 国产一区二区在线视频| 欧美日韩国产高清一区二区三区| 中文字幕中文字幕一区二区| 国产一区欧美二区| 日韩欧美一二区| 性欧美大战久久久久久久久| 色婷婷精品久久二区二区蜜臂av| 国产精品国产三级国产aⅴ中文| 国产一区二区毛片| 精品国产人成亚洲区| 青青青伊人色综合久久| 欧美高清精品3d| 午夜伦欧美伦电影理论片| 欧美午夜精品久久久久久超碰| 136国产福利精品导航| 国产激情一区二区三区四区| 精品国一区二区三区| 美女免费视频一区二区| 91精品国产日韩91久久久久久| 五月天久久比比资源色| 欧美三级资源在线| 亚洲成年人网站在线观看| 欧美视频在线不卡| 图片区小说区国产精品视频| 欧美日韩午夜精品| 三级一区在线视频先锋| 欧美精品久久天天躁| 舔着乳尖日韩一区| 日韩西西人体444www| 久久草av在线| 久久色在线视频| 国产精品一级黄| 国产精品欧美久久久久无广告| 99久久精品免费看国产免费软件| 中文字幕一区二区三区蜜月| 一本久道久久综合中文字幕| 亚洲乱码精品一二三四区日韩在线| 91搞黄在线观看| 午夜av电影一区| 精品精品国产高清一毛片一天堂| 国产精品资源站在线| 中文字幕一区二区三区色视频| 色综合中文字幕| 亚洲123区在线观看| 91精品蜜臀在线一区尤物| 久久99国产精品久久| 久久久精品综合| 91视频在线看| 亚洲成va人在线观看| 日韩片之四级片| 国产成人午夜精品5599| 日韩理论片中文av| 欧美日韩国产综合久久 | 亚洲女同一区二区| 欧美亚洲动漫精品| 久久福利视频一区二区| 中文字幕不卡在线| 在线观看欧美黄色| 久久国内精品自在自线400部| 国产日韩欧美精品一区| 色综合久久88色综合天天| 日韩综合一区二区| 久久精品欧美日韩精品| 色婷婷综合久久久久中文一区二区| 日韩经典一区二区| 中文字幕国产一区二区| 欧美日韩一区二区在线观看视频| 久久99热这里只有精品| 中文字幕中文字幕一区二区| 欧美高清dvd| 成人黄色免费短视频| 婷婷六月综合亚洲| 国产精品欧美一区喷水| 欧美人体做爰大胆视频| 国产一区二区三区免费播放| 亚洲黄网站在线观看| 精品少妇一区二区三区在线视频| 北岛玲一区二区三区四区| 三级久久三级久久久| 欧美激情综合五月色丁香小说| 欧美性videosxxxxx| 国产成人亚洲精品狼色在线| 天天av天天翘天天综合网色鬼国产| 久久丝袜美腿综合| 欧美理论电影在线| 高清在线不卡av| 日本欧美肥老太交大片| 亚洲欧美偷拍卡通变态| 精品1区2区在线观看| 91搞黄在线观看| 大胆欧美人体老妇| 奇米精品一区二区三区在线观看| 亚洲欧美怡红院| 26uuu国产在线精品一区二区| 欧美午夜寂寞影院| av一区二区三区黑人| 久久成人免费日本黄色| 亚洲成人av电影| 亚洲三级久久久| 久久久久久久综合色一本| 欧美日韩国产影片| 成人高清在线视频| 国产永久精品大片wwwapp | 亚洲欧洲美洲综合色网| 欧美videossexotv100| 欧美日韩激情一区二区三区| 91麻豆视频网站| 粉嫩av一区二区三区| 久久精品999| 欧美一区二区三区小说| 色噜噜狠狠色综合欧洲selulu| 国产成人久久精品77777最新版本| 男女男精品视频网| 亚洲成a人片在线不卡一二三区| 18欧美亚洲精品| 国产精品第13页| 国产喂奶挤奶一区二区三区| 精品久久国产老人久久综合| 91精品国产色综合久久久蜜香臀| 欧美在线观看视频在线| 色婷婷国产精品久久包臀| 波多野结衣欧美| 丰满岳乱妇一区二区三区| 国产一区二区在线看| 日本aⅴ精品一区二区三区| 首页亚洲欧美制服丝腿| 亚洲一级电影视频| 一区二区在线免费观看| 樱花草国产18久久久久| 自拍偷在线精品自拍偷无码专区| 欧美激情一区在线| 欧美国产欧美亚州国产日韩mv天天看完整 | 天天综合天天做天天综合| 一区二区三区中文字幕在线观看| 国产精品久久国产精麻豆99网站| 日本一区免费视频| 国产亚洲综合av| 国产欧美精品国产国产专区 | 欧美精品久久一区二区三区| 欧美日韩免费不卡视频一区二区三区| 日本高清无吗v一区| 在线日韩av片| 欧美色倩网站大全免费| 欧美群妇大交群中文字幕| 在线免费观看不卡av| 91黄色免费观看| 欧美日韩和欧美的一区二区| 欧美日韩电影在线播放| 欧美一二三四在线| 精品福利二区三区| 国产情人综合久久777777| 国产精品天天看| 亚洲婷婷综合色高清在线| 亚洲男人都懂的| 亚洲第一av色| 日本欧美加勒比视频| 国产一区二区视频在线| 国产成人免费视| 91丨九色丨尤物| 欧亚一区二区三区| 91麻豆精品国产91久久久更新时间| 欧美一二三在线| 久久九九国产精品| 日韩毛片精品高清免费| 亚洲成人免费视频| 久久99精品视频| www.在线欧美| 欧美精品精品一区| 久久综合色婷婷| 亚洲男人天堂av网| 日韩不卡一区二区三区 | 亚洲综合在线视频| 欧美男生操女生| 久久久亚洲午夜电影| 亚洲欧洲精品一区二区三区| 香蕉av福利精品导航 | 亚洲美女视频一区| 丝袜美腿亚洲色图| 国产黑丝在线一区二区三区| 色婷婷激情一区二区三区| 日韩一级片在线观看| 国产目拍亚洲精品99久久精品| 一区二区三区四区在线免费观看| 秋霞午夜av一区二区三区|