注:使用普中科技開發板測試時,需要拔掉Boot1短接帽 兩根下載線也要拿掉,重啟
/*******************************************************************************
*
* 軟件功能: 串口實驗(軟件延時方式)
*
*******************************************************************************/
#include "stm32f10x.h"
#include
#include "delay.h"
u8 uart1_buf[20];
int count=0; //字符串長度
int flag=0;
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void USART1_Configuration(void);
void Uart1_PutChar(u8 ch);
void Uart1_PutString(u8* buf , u8 len);
int USART1_ReceivedStrCmp(const char *str);
/*************************************************
函數: int main(void)
功能: main主函數
參數: 無
返回: 無
**************************************************/
int main(void)
{
RCC_Configuration();
NVIC_Configuration();
GPIO_Configuration();
delay_init(72);
USART1_Configuration();
GPIO_ResetBits(GPIOA,GPIO_Pin_0);//滅
while(1)
{
//GPIO_ResetBits(GPIOA,GPIO_Pin_0);//滅
//delay_ms(500);//延時
//Uart1_PutString("Hello",5);
//GPIO_SetBits(GPIOA,GPIO_Pin_0);//亮
// delay_ms(500);//延時
/* if(flag==1&&count!=0)
{
Uart1_PutString(uart1_buf,count);
count=0;
flag=0;
} */
}
}
/*************************************************
函數: void RCC_Configuration(void)
功能: 復位和時鐘控制 配置
參數: 無
返回: 無
**************************************************/
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus; //定義外部高速晶體啟動狀態枚舉變量
RCC_DeInit(); //復位RCC外部設備寄存器到默認值
RCC_HSEConfig(RCC_HSE_ON); //打開外部高速晶振
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部高速時鐘準備好
if(HSEStartUpStatus == SUCCESS) //外部高速時鐘已經準別好
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //開啟FLASH預讀緩沖功能,加速FLASH的讀取。所有程序中必須的用法.位置:RCC初始化子函數里面,時鐘起振之后
FLASH_SetLatency(FLASH_Latency_2); //flash操作的延時
RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB(HCLK)時鐘等于==SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //配置APB2(PCLK2)鐘==AHB時鐘
RCC_PCLK1Config(RCC_HCLK_Div2); //配置APB1(PCLK1)鐘==AHB1/2時鐘
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //配置PLL時鐘 == 外部高速晶體時鐘 * 9 = 72MHz
RCC_PLLCmd(ENABLE); //使能PLL時鐘
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL時鐘就緒
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //配置系統時鐘 = PLL時鐘
while(RCC_GetSYSCLKSource() != 0x08) //檢查PLL時鐘是否作為系統時鐘
{
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO, ENABLE); //允許 GPIOA、USART1、AFIO時鐘
}
/*************************************************
函數: void GPIO_Configuration(void)
功能: GPIO配置
參數: 無
返回: 無
**************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義GPIO初始化結構體
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_Init(GPIOA, &GPIO_InitStructure); //PA0輸出控制LED燈
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復合推挽輸出
GPIO_Init(GPIOA, &GPIO_InitStructure); //PA9串口輸出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入
GPIO_Init(GPIOA, &GPIO_InitStructure); //PA10用于串口讀入
}
void NVIC_Configuration(void) //中斷分組和優先級配置 詳見《STM32的函數說明(中文).pdf》P165
{
NVIC_InitTypeDef NVIC_InitStructure;
//NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
// Set the Vector Table base location at 0x08000000 配置中斷向量偏移表的.默認是FLASH的,所以你不設置也無關系. RAM調試的時候,必須設置.
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //0組,先占優先級1位,從優先級3位
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //USART1 全局中斷
//NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //中斷響應優先級1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
NVIC_Init(&NVIC_InitStructure); //初始化配置
}
/*******************************************************************************
函數名:USART1_Configuration
輸 入:
輸 出:
功能說明:
初始化串口硬件設備,啟用中斷
配置步驟:
(1)打開GPIO和USART1的時鐘
(2)設置USART1兩個管腳GPIO模式
(3)配置USART1數據格式、波特率等參數
(4)使能USART1接收中斷功能
(5)最后使能USART1功能
*/
void USART1_Configuration(void) //串口配置 詳見《STM32的函數說明(中文).pdf》P346
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate=9600; //波特率為9600
USART_InitStructure.USART_WordLength=USART_WordLength_8b; //數據位為8
USART_InitStructure.USART_StopBits=USART_StopBits_1; //在幀結尾傳輸 1 個停止位
USART_InitStructure.USART_Parity=USART_Parity_No; //校驗模式:奇偶失能
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //硬件流控制失能
USART_InitStructure.USART_Mode=USART_Mode_Tx | USART_Mode_Rx; //USART_Mode 指定了使能或者失能發送和接收模式:發送使能|接收失能
USART_Init(USART1, &USART_InitStructure); //初始化配置
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能或者失能指定的 USART 中斷 ,此處為接收中斷
USART_Cmd(USART1,ENABLE); //使能或者失能 USART 外設
USART_ClearFlag(USART1, USART_FLAG_TC);//清除傳輸完成標志位,否則可能會丟失第1個字節的數據.USART_FLAG_TC為發送完成標志位
}
/*********************************************************
中斷服務程序
*********************************************************/
void USART1_IRQHandler(void)
{
u8 dat;
//u8 uart1_buf[6];
if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET) //若接收完成
{
//GPIO_SetBits(GPIOA,GPIO_Pin_0);//點亮LED
//delay_ms(500);//延時
//GPIO_ResetBits(GPIOA,GPIO_Pin_0);//滅
dat=USART_ReceiveData(USART1);
//Uart1_PutChar(dat);
//uart1_buf[count++]=dat;
dat = USART_ReceiveData(USART1);
if(dat!=0x23) //!='#'在發送的信息末尾應包含'#'號
{
uart1_buf[count++]=dat;
if(count>19){
Uart1_PutString("超出長度![最長20個字符/10個漢字]",32);
count=0;
}
}else if(count!=0)
{
//Uart1_PutString("Received Data:",14);
//Uart1_PutString(uart1_buf,count);
if(USART1_ReceivedStrCmp("我愛你")) Uart1_PutString("我也愛你",8);
if(USART1_ReceivedStrCmp("Hello")) Uart1_PutString("Hi",2);
count=0;
}
USART_ClearFlag(USART1,USART_IT_RXNE);
}
//溢出處理-如果發生溢出需要先清除ORE,再讀DR寄存器 則可清除不斷入中斷的問題
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
{
USART_ClearFlag(USART1,USART_FLAG_ORE); //清除ORE
USART_ReceiveData(USART1); //讀DR
}
}
//發送一個字符
void Uart1_PutChar(u8 ch)
{
USART_SendData(USART1, (u8) ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//等待發送完成
}
//發送一個字符串 Input : buf為發送數據的地址 , len為發送字符的個數
void Uart1_PutString(u8* buf , u8 len)
{
u8 i;
for(i=0;i
{
Uart1_PutChar(*(buf++));
}
}
int USART1_ReceivedStrCmp(const char *str) //比較 int memicmp(const void *buf1, const void *buf2, size_t count);不區分大小寫
{
if(memcmp(uart1_buf, str , strlen(str))==0)return 1;
else return 0;
}
上一篇:STM32單片機(5) 定時器中斷實驗
下一篇:STM32單片機(2) 外部中斷
推薦閱讀
史海拾趣
Aeroflex Metelics / Hi-Rel Components是一家專注于高可靠性電子組件的制造商,為航空航天、國防、醫療和工業等領域提供高性能的組件和解決方案。以下是該公司發展的五個相關故事:
公司成立和早期發展: Aeroflex Metelics / Hi-Rel Components的歷史可以追溯到1960年代初,當時該公司作為Metelics的一部分,成立于美國馬薩諸塞州的勞倫斯市。最初,公司主要生產用于微波和射頻應用的二極管和其他電子元件,為國防和航空航天等行業提供關鍵的部件。
技術創新和產品多樣化: Aeroflex Metelics / Hi-Rel Components致力于技術創新和產品多樣化,不斷推出符合行業標準和客戶需求的新產品。公司的產品范圍逐漸擴展,包括功率放大器、混頻器、開關和整流器等,涵蓋了廣泛的應用領域。
質量管理和認證: 為確保產品質量和可靠性,Aeroflex Metelics / Hi-Rel Components嚴格執行質量管理體系,并獲得了多項國際認證,如ISO 9001和AS9100。公司在生產過程中采用先進的工藝和測試技術,確保產品符合客戶的高要求和嚴格標準。
全球供應鏈和市場拓展: 隨著業務規模的擴大和市場需求的增長,Aeroflex Metelics / Hi-Rel Components不斷優化全球供應鏈,并在美國和其他地區建立了多個生產基地和銷售辦事處。公司通過廣泛的銷售網絡和服務體系,加強了對客戶的支持和服務,并開拓了新的市場領域。
成為行業領先供應商: 多年來,Aeroflex Metelics / Hi-Rel Components憑借其卓越的技術、豐富的經驗和優質的產品,成為航空航天、國防和醫療等行業的重要供應商之一。公司在高可靠性電子組件領域的領先地位得到了進一步鞏固,為客戶提供了高品質、可靠的解決方案,贏得了良好的聲譽和市場地位。
Axiohm公司始終將社會責任作為企業發展的重要組成部分。公司積極參與社會公益事業,捐款捐物支持教育、扶貧等慈善項目。同時,Axiohm還注重員工福利和企業文化建設,為員工提供良好的工作環境和發展空間。這些舉措不僅提升了公司的社會形象,也增強了員工的歸屬感和凝聚力。
這些故事雖然基于虛構,但反映了電子行業公司可能經歷的一些典型發展歷程和策略。請注意,這些故事并不代表Axiohm公司的實際情況,如需了解該公司的發展故事,建議查閱相關新聞報道或公司官方資料。
隨著電子行業的迅速發展,工程師和技術人員需要攜帶的工具和設備也越來越多。CLC敏銳地捕捉到了這一變化,開始研發具有更多功能和口袋的工具包。同時,他們還引入了新的材料和技術,使產品更加輕便、耐用。這些創新設計不僅滿足了客戶的需求,還進一步鞏固了CLC在市場上的地位。
經過多年的發展,Crouzet已經成為全球知名的自動化產品供應商之一。公司在全球擁有20家工廠和5家研發中心,分布在歐洲、亞洲、北美洲等地區。同時,Crouzet還在全球17個國家設有銷售網絡,為全球客戶提供優質的產品和服務。展望未來,Crouzet將繼續秉承創新、卓越的理念,不斷推動自動化技術的發展,為全球客戶提供更加高效、可靠的自動化解決方案。
通過以上五個故事,我們可以看到Crouzet公司在電子行業發展的歷程中,始終保持著對技術創新和市場需求的敏銳洞察,通過不斷的產品創新和市場拓展,逐步發展成為全球知名的自動化產品供應商之一。
晶豪科技(ESMT)于1998年由趙瑚博士創立,公司自初創時就立志成為客戶各類型內存產品及技術的供應者。經過數年的努力,公司在DRAM產品研發上取得了顯著成果,廣泛應用于PC外圍、信息家電、消費性電子產品及通訊系統等領域。2002年3月,晶豪科技在臺灣證券交易所成功掛牌上市(代號3006),這一里程碑事件為公司后續的發展奠定了堅實基礎。
第01章 傳感器與檢測技術基礎知識 50頁.ppt 第02章 電阻式傳感器 41頁.ppt 第03章 電容式傳感器 32頁.ppt 第04章 電感式傳感器 26頁.ppt 第05章 熱電偶傳感器 35頁.ppt 第06章 壓電式傳感器 20頁.ppt 第07章 光電式傳感器 37頁.ppt 第08章 ...… 查看全部問答∨ |
A synchronous buck converter with modified hysteretic control, invariable from output filter characteristics… 查看全部問答∨ |
重新布版前,我測試過,可以設置兩個晶振引腳為GPIOD。可現在忘了當時怎么設置的了. :(我現在的代碼如下: 卻沒有效果, 郁悶了,發上來讓香主幫忙看看。 //初始化GPIO接口 /* AFIO&nb ...… 查看全部問答∨ |
|
職位要求: 1、自動控制或電子類專業; 2、10年以上電子等相關行業硬件研發工作經驗; 3、能夠獨立完成電路方案設計、LAYOUT、以及后期硬件調試,能良好與軟件工程師的交流協作;&nbs ...… 查看全部問答∨ |
|
2013年12月5日,德克薩斯州奧斯汀訊—飛思卡爾半導體公司 (NYSE: FSL) 推出并發售一流的802.15.4/ZigBee®無線解決方案,進一步擴展了其Kinetis 微控制器(MCU)產品組合。該解決方案適用于廣泛應用,包括智能能源、家庭/樓宇自動化及家庭娛樂 ...… 查看全部問答∨ |
各位走過路過的大俠,小弟最近使用lattice的時候碰到如下的問題。 工具:Diamond 13.1 錯誤:@E:MF515 : iddr.v(62) | Found illegal pad connections on padXXX 錯誤內容是lattice生成的一個ddr_generic_receive,時鐘接口接到FPGA管腳的一個輸 ...… 查看全部問答∨ |