先從最簡單的問題開始,用STM32外部中斷的方法實現PB.0按鍵控制PA.0LED燈:
先總的說下實現中斷的步驟:
1,配置NVIC寄存器(函數),設置中斷為第幾組,占先優先級和次優先級;
函數方法:
void NVIC_Configuration()
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreempTIonPriority=0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
以上為配置優先級的一般步驟:設置優先級分組,設置中斷通道,分別設置先占優先級,次占優先級,使能等;
2,配置EXTI寄存器及(函數),設置中斷線,中斷方式,等;
voidEXTI_Configuration()
{
EXTI_InitTypeDefEXTI_InitStructure;
EXTI_ClearITPendingBit(EXTI_Line0);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);
EXTI_InitStructure.EXTI_Line=EXTI_Line0;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
和配置NVIC一樣,這也是EXTI配置的一般步驟:清除相應中斷線標志位(這個很重要,剛開始一直沒找到這個問題),聯結端口與中斷線(也可以在GPIO初始化時配置),選擇中斷線,設置中斷模式,中斷方式,使能等;
3,寫中斷服務函數
中斷服務程序一般寫在STM32F10X_it.c文件里:
voidEXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0)==SET)
{
EXTI_ClearITPendingBit(EXTI_Line0);
if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0)==Bit_RESET)
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
else
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}
}
}
其中最重要的一點:需要注意進入服務程序后清除中斷標志位;
說幾點容易忽略的地方:
1.中斷服務程序一定要清除中斷標志位;
2.聯結相應端口與中斷線;
3.按鍵端口設置成上拉輸入;
4.在配置EXTI時清除中斷標志位;
按鍵部分的短路自己連的:
下面是直接操作寄存器的方法:
1.GPIO初始化:這里只要注意GPIOB.0設置成上拉輸入(不光要設置GPIOB-》CRL=0X08,還要設置GPIOB-》ODR=0X01,為了和下拉區分)
voidGPIO_Config()
{
GPIOA-》CRL=0X03;
GPIOA-》ODR=0X01;
GPIOB-》CRL=0X08;
GPIOB-》ODR=0X01;
}
2. NVIC 初始化:
直接上代碼:
voidNVIC_Configuration()
{
u32temp;
temp=SCB-》AIRCR;
temp&=0x0000f8ff;
temp|=0x05fa0000;
temp|=0x0700;
SCB-》AIRCR=temp;
NVIC-》ISER[0]=1《《6;
NVIC-》IP[1]=0;
}
3. EXTI初始化
和用函數方法差不多,設置幾個寄存器;有點不明白的是這里好像可以不用清除標志位;
voidEXTI_Configuration()
{
AFIO-》EXTICR[0]=0X0001;
EXTI-》IMR=0X01;
EXTI-》RTSR=0X01;
}
然后是中斷服務程序:
voidEXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0)==SET)
{
EXTI-》PR=0X01;
if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0)==Bit_RESET)
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
else
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}
}
}
下面是整個用函數代碼:
#include“stm32f10x.h”
voidGPIO_Config();
voidNVIC_Configuration();
voidEXTI_Configuration();
voidSysclkConfiguration();
intmain()
{
SysclkConfiguration();
GPIO_Config();
EXTI_Configuration();
NVIC_Configuration();
while(1);
return0;
}
voidSysclkConfiguration()
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
if(RCC_WaitForHSEStartUp()==SUCCESS)
{
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource()!=0X08);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
}
}
voidGPIO_Config()
{
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO
上一篇:如何使用STM32單片機設置PWM輸出
下一篇:STM32定時器所支持的三種計數模式及計數過程
推薦閱讀
史海拾趣
對于能判斷障礙物的機器人電路,網友可能還有以下幾個問題及其相應回答:
問題一:機器人通常使用哪些傳感器來判斷障礙物?
回答:
機器人通常使用多種傳感器來判斷障礙物,主要包括但不限于以下幾種:
-
超聲波傳感器:這是最常見的一種傳感器,通過發射超聲波并接收其反射回來的信號,根據信號的時間差和波速計算障礙物的距離。超聲波傳感器在檢測大范圍、非接觸式的障礙物時非常有效。
-
紅外傳感器:紅外傳感器通過發射紅外光并接收其反射光來判斷障礙物的存在和距離。紅外傳感器在近距離和快速檢測中表現優異,且成本相對較低。
-
激光傳感器:激光傳感器利用激光束進行測距,具有高精度、長距離測量的特點。但相比超聲波和紅外傳感器,激光傳感器的成本更高,適用于對精度要求極高的應用場景。
-
視覺傳感器:一些高級的機器人還配備了視覺傳感器,如攝像頭,通過圖像處理技術來識別并判斷障礙物。這種方法可以實現更復雜的場景理解和避障策略。
問題二:如何設計能判斷障礙物的機器人電路?
回答:
設計能判斷障礙物的機器人電路需要考慮以下幾個關鍵步驟:
-
選擇合適的傳感器:根據機器人的應用場景、成本預算和精度要求選擇合適的傳感器。
-
設計信號處理電路:將傳感器采集到的原始信號(如電壓、電流等)進行放大、濾波等處理,以便于后續的數字處理或微控制器讀取。
-
微控制器編程:根據傳感器的輸出信號編寫微控制器的程序,實現障礙物的判斷、避障策略的制定和執行。
-
執行機構控制:通過微控制器控制機器人的執行機構(如電機、舵機等),實現機器人的移動和避障動作。
-
整體調試與優化:對整個電路進行調試和優化,確保機器人能夠準確、穩定地判斷障礙物并執行避障動作。
問題三:如何提高機器人判斷障礙物的準確性和穩定性?
回答:
提高機器人判斷障礙物的準確性和穩定性可以從以下幾個方面入手:
-
選用高質量的傳感器:高質量的傳感器具有更高的精度和穩定性,能夠減少誤判和漏判的情況。
-
優化信號處理電路:通過合理的電路設計和元器件選擇,減少信號噪聲和干擾,提高信號的信噪比和可靠性。
-
算法優化:對微控制器的算法進行優化,采用更先進的算法或策略來提高障礙物的判斷精度和避障效果。
-
多傳感器融合:利用多種傳感器進行融合處理,可以彌補單一傳感器的不足,提高整個系統的魯棒性和可靠性。
-
實驗驗證與迭代優化:通過大量的實驗驗證和迭代優化,不斷調整和優化機器人的參數和算法,以提高其判斷障礙物的準確性和穩定性。
在電子組裝行業,品質是企業的生命線。一家名為“品質電子組裝”的公司,從創立之初就堅持以品質為核心競爭力。公司引進了國際先進的生產設備和管理體系,建立了嚴格的質量控制體系,確保每一件產品都符合高標準、嚴要求。正是憑借著對品質的堅守和追求,品質電子組裝贏得了客戶的廣泛贊譽和信賴,逐漸在行業中樹立了良好的口碑。
在競爭激烈的電子組裝市場中,一家名為“精準電子組裝”的公司憑借其精準的市場定位脫穎而出。公司深入研究行業趨勢和客戶需求,準確把握市場脈搏,專注于為高端客戶提供定制化的電子組裝服務。通過不斷挖掘客戶需求、提升服務水平,精準電子組裝在高端市場上占據了一席之地,實現了快速發展。
隨著科技的快速發展和市場的不斷變化,客戶需求也在不斷更新。為了滿足客戶不斷變化的需求,Diodes公司始終保持敏銳的市場洞察力和創新力。公司不斷推出新產品、新技術和新應用方案,以滿足客戶在性能、可靠性、成本等方面的需求。同時,Diodes還積極與客戶溝通交流,了解客戶的實際需求和反饋意見,不斷優化產品和服務。這些努力使得Diodes能夠緊跟市場步伐、滿足客戶需求,在激烈的市場競爭中保持領先地位。
芯聯集成非常重視企業文化建設,致力于打造一個高效、協作、創新的團隊。公司倡導“以人為本”的管理理念,關注員工成長和發展,為員工提供良好的工作環境和福利待遇。同時,公司還建立了完善的激勵機制和培訓體系,激發員工的工作熱情和創造力。這些努力使芯聯集成在行業內樹立了良好的口碑和形象,吸引了眾多優秀人才加入公司。
Everspin的MRAM和STT-MRAM產品因其獨特的數據持久性和非易失性特性,在數據中心和云存儲市場中得到了廣泛應用。超過1.2億個MRAM和STT-MRAM產品被部署在這些市場中,為數據中心和云存儲提供了高性能、高效率、可靠的系統解決方案。Everspin的產品在這些領域中的成功應用,進一步鞏固了其在電子行業中的地位。
如題 int main() __attribute__ ((C, spontaneous)) { platform_bootstrap(); } 是TinyOS中的nesC代碼。 … 查看全部問答∨ |
|
用tornado時 build沒問題,但download時報錯 程序就是想打印BIOS中的時間:年 原程序如下: #include #include #include #include void biostime() { struct tm ahora; int cYear; sysOutByte(0x70,0x09); ...… 查看全部問答∨ |
我用一個高精度的穩壓電源輸出一個電壓信號經過一個AD706輸出給max197的19腳(CH3),經過A/D轉換后在液晶上顯示的總是比輸入的少3mv,不知道是為什么。比如說我電壓源給一個500mv的電壓,在197的19腳上量到也是500mv,但是輸出后經過單片機的P0口 ...… 查看全部問答∨ |
一、 原理圖部分 1、 庫 ⑴ DxDesigner 的原理圖庫與PCB的庫是相互獨立的,而且每個原理圖符號庫都是一個文件,很難實現統一管理;AD6可以使用集成庫來統一管理,不僅是原理圖符號庫與PCB封裝庫,還能把混合電路仿真庫、信號完整性分析模型庫以 ...… 查看全部問答∨ |
美國EETimes雜志剛剛發布了2010年全球電子工程師收入調查結果。數據表明,中國的電子工程師收入最低,僅相當于北美同行的16%,然而他們的付出卻是全球最高的。報告稱,工程師得不到休息是全球性問題,尤其是對于中國的工程師而言。中國最近超 ...… 查看全部問答∨ |
Code Composer Studio v4 (CCS v4) 是用于 TI DSP、微處理器和應用處理器的集成開發環境。Code Composer Studio 包含一整套用于開發和調試嵌入式應用的工具。它包含適用于每個 TI 器件系列的編譯器、源碼編輯器、項目構建環境、調試器、描述器、仿 ...… 查看全部問答∨ |
針對目前采用的簡易氣象綜合觀測儀,存在著實時性差、精度不夠、作業時間長以及不能直接計算射擊條件修正量和地面風修正量等諸多問題,本文提出基于MSP430F149單片機設計一種炮兵氣象儀,以滿足炮兵分隊射擊時的簡易氣象條件和火箭炮地面風修正的 ...… 查看全部問答∨ |