久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9196|回復: 3
收起左側

STM32F030外部中斷的使用

[復制鏈接]
ID:276663 發表于 2019-1-3 17:39 | 顯示全部樓層 |閱讀模式
本帖最后由 IdeaMing 于 2019-1-3 17:48 編輯

STM32F030外部中斷的使用前言:
         今天把之前的一個坑填上,在STM32F030C8配置NRF24L01”一文中,最后一句“另外一篇詳細講外部中斷的配置”,挖了個坑,有小伙伴QQ聯系我怎么找不到另一篇。自己才想起來。好了,緊接那篇文章補上本篇。為了加快各位研發人員的開發進度,避免浪費大量的時間在硬件平臺上,寫出個人代碼調試的經驗。個人水平有限,如有錯誤,還請指正mr.li.ming@qq.com

提示:使用的內部RC時鐘,最大速度48MHz

第一步:初始化端口



頭文件中的相關定義
  1. 頭文件中的相關定義
  2. /** @addtogroup BOARD_LOW_LEVEL_INTRRUPT
  3.   * @{
  4.   */  
  5. #define RF_IRQ_CLK                      RCC_AHBPeriph_GPIOB //IRQ主機數據輸入
  6. #define RF_IRQ_PORT                     GPIOB
  7. #define RF_IRQ_PIN                      (GPIO_Pin_0)

  8. #define RF_EXTI_LINE                    EXTI_Line0
  9. #define RF_EXTI_IRQn                    EXTI0_1_IRQn
  10. #define RF_EXTI_PIN_SOURCE              EXTI_PinSource0
  11. #define RF_EXTI_PORT_SOURCE             EXTI_PortSourceGPIOB
  12. /**
  13.   * @}
  14.   */
復制代碼
  1. /*******************************************************************************
  2.   * @brief  初始化端口
  3.   * @param  None
  4.   * @retval None
  5. ****************************************************************Author:Liming**/
  6. void NRF24L01_EXTI_Init(void)
  7. {
  8.     GPIO_InitTypeDef GPIO_InitStructure;
  9.     EXTI_InitTypeDef EXTI_InitStructure;
  10.     NVIC_InitTypeDef NVIC_InitStructure;
  11.    
  12.         GPIO_InitStructure.GPIO_Pin = RF_IRQ_PIN;
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  14.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  15.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;        
  16.         GPIO_Init(RF_IRQ_PORT,&GPIO_InitStructure);                                                // IRQ中斷輸入腳
  17.    
  18.         GPIO_SetBits(RF_IRQ_PORT,RF_IRQ_PIN);
  19.    
  20.     EXTI_ClearITPendingBit(RF_EXTI_LINE);
  21.     SYSCFG_EXTILineConfig(RF_EXTI_PORT_SOURCE,RF_EXTI_PIN_SOURCE);
  22.    
  23.     EXTI_InitStructure.EXTI_Line = RF_EXTI_LINE;
  24.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  25.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  26.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  27.     EXTI_Init(&EXTI_InitStructure);
  28.         
  29.     NVIC_InitStructure.NVIC_IRQChannel = RF_EXTI_IRQn;
  30.     NVIC_InitStructure.NVIC_IRQChannelPriority = 2;
  31.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  32.     NVIC_Init(&NVIC_InitStructure);            
  33. }
復制代碼




第二步:修改中斷入口函數

  1. /*******************************************************************************
  2.   * @brief        中斷入口函數
  3.   * @param        None
  4.   * @retval         None
  5. ****************************************************************Author:Liming**/
  6. void EXTI0_1_IRQHandler(void)
  7. {   
  8.     if(EXTI_GetITStatus(RF_EXTI_LINE) != RESET)
  9.     {                     
  10.         EXTI_ClearITPendingBit(RF_EXTI_LINE);// Clear the EXTI line pending bit
  11.         EXTI0_Process();
  12.     }
  13. }
復制代碼



第三步:中斷處理函數


  1. //24L01發送接收數據寬度定義
  2. #define TX_ADR_WIDTH    3   //3字節的地址寬度
  3. #define RX_ADR_WIDTH    3   //3字節的地址寬度
  4. #define TX_PLOAD_WIDTH  32  //32字節的用戶數據寬度
  5. #define RX_PLOAD_WIDTH  32  //32字節的用戶數據寬度

  6. typedef enum
  7. {
  8.     NRF_STATUS_IDLE = 0X30,
  9.     NRF_STATUS_RX = 0X41,       // A
  10.     NRF_STATUS_RXOK = 0X42,     // B
  11.     NRF_STATUS_TXMODE = 0X60,   // a
  12.     NRF_STATUS_TX = 0X61,       // b
  13.     NRF_STATUS_TXOK = 0X62,     // c
  14.     NRF_STATUS_TXERROR = 0X63   // d
  15. }NRF_Status_Typedef;

  16. NRF_Status_Typedef NRF_STATUS = NRF_STATUS_IDLE;    // 初始狀態

  17. unsigned char NRF_RxBuff[RX_PLOAD_WIDTH];

  18. /*******************************************************************************
  19.   * @brief         中斷處理函數
  20.   * @param         None
  21.   * @retval        None
  22. ****************************************************************Author:Liming**/  
  23. void EXTI0_Process(void)
  24. {  
  25.     unsigned char status;
  26.     status = NRF24L01_Read_Reg(STATUS);
  27.     RF_CE_LOW;
  28.     NRF24L01_Write_Reg(SPI_WRITE_REG+STATUS,status);
  29.     RF_CE_HIGH;
  30. switch(status&0x70)//判斷是哪個中斷
  31. {
  32.         case 0x40:
  33.             RF_CE_LOW;
  34.             NRF24L01_Read_Buf(RD_RX_PLOAD,NRF_RxBuff,RX_PLOAD_WIDTH);//讀取數據            
  35.             NRF24L01_Write_Reg(FLUSH_RX,0x00);//清除RX FIFO寄存器
  36.             runtime = NRF_RxBuff[25]<<8|NRF_RxBuff[26];
  37.             DispValAlignCenter(6,runtime);  
  38.             NRF_STATUS = NRF_STATUS_RXOK;        
  39.             RF_CE_HIGH;                                                            
  40.             break;
  41.         case 0x30:         
  42.         case 0x20:  NRF_STATUS = NRF_STATUS_TXOK;break;
  43.         case 0x10:  NRF_STATUS = NRF_STATUS_TXERROR;break;
  44.         default:break;
  45.     }
  46. }
復制代碼



希望對各位看官有所幫助,并能觸類旁通,其它的引腳中斷也能熟練使用。或許當時也是因為中斷的配置一旦用了之后就覺得很簡單了吧,今天補上,希望對您的工作學習有所幫助。


附上PDF文檔: STM32F030外部中斷的使用.pdf (445.96 KB, 下載次數: 143)

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:477028 發表于 2019-4-23 14:03 | 顯示全部樓層
好東西,頂起來
回復

使用道具 舉報

ID:87000 發表于 2019-4-25 11:58 | 顯示全部樓層
頂起來,看看參考一下
回復

使用道具 舉報

ID:583057 發表于 2019-8-23 10:36 | 顯示全部樓層
學習學習!!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲精品久久久久久牛牛 | 久久日韩粉嫩一区二区三区 | 欧美影院| 日韩网站免费观看 | av在线天堂 | 在线免费观看色 | 国产欧美一区二区三区在线看 | 一级黄色片网站 | 日韩中文字幕在线观看 | 亚洲免费在线观看av | 免费小视频在线观看 | 99re视频 | 成人av播放 | 欧美日韩在线一区二区 | 黄色免费网址大全 | 精品国产欧美一区二区三区成人 | 欧美久久久网站 | 久久久国产精品视频 | 精品一区二区三区不卡 | 99久久精品免费看国产高清 | 香蕉av免费 | 天天综合永久入口 | 日韩有码一区 | 在线观看中文字幕av | 中文在线一区二区 | 欧美精品一区免费 | 国产精品av久久久久久毛片 | 免费一区二区三区 | 91久久北条麻妃一区二区三区 | 丁香六月激情 | 日韩精品在线视频 | 精品国产乱码久久久久久闺蜜 | 欧美综合一区二区 | www.欧美视频 | 国产玖玖 | 国产免费一区二区 | 日本精品一区二区三区视频 | 日韩免费1区二区电影 | 国产欧美精品一区二区三区 | 国产在线二区 | 毛片一级网站 |