STM32—中斷詳解

筆者博客鏈接:蠟筆小新沒有博客
希望可以和志同道合的朋友多交流!
在STM32中執(zhí)行中斷主要分三部分:
==1.配置NVIC_Config()函數(shù)
2.配置EXTI_Config()函數(shù)
3.編寫中斷服務(wù)函數(shù)==
(注:本文章所用代碼為中斷按鍵代碼售淡,實(shí)現(xiàn)了按鍵進(jìn)入中斷從而控制LED亮滅)

==配置NVIC_Config()函數(shù)==

NVIC 是嵌套向量中斷控制器笔诵,控制著整個(gè)芯片中斷相關(guān)的功能谦炒,它跟內(nèi)核緊密耦合积暖,是內(nèi)核里面的一個(gè)外設(shè)或悲。
NVIC_Config()函數(shù)代碼如下

static void NVIC_Config(void) /* 主要是配置中斷源的優(yōu)先級與打開使能中斷通道 */
{
    NVIC_InitTypeDef NVIC_InitStruct ;
    
    /* 配置中斷優(yōu)先級分組(設(shè)置搶占優(yōu)先級和子優(yōu)先級的分配)孙咪,在函數(shù)在misc.c */
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1) ;
    
    /* 配置初始化結(jié)構(gòu)體 在misc.h中 */
    /* 配置中斷源 在stm32f10x.h中 */
    NVIC_InitStruct.NVIC_IRQChannel = KEY1_EXTI_IRQN ;
    /* 配置搶占優(yōu)先級 */
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1 ;
    /* 配置子優(yōu)先級 */
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0 ;
    /* 使能中斷通道 */
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;
    /* 調(diào)用初始化函數(shù) */
    NVIC_Init(&NVIC_InitStruct) ;
    
    /* 對key2執(zhí)行相同操作 */
    NVIC_InitStruct.NVIC_IRQChannel = KEY2_EXTI_IRQN ;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1 ;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1 ;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;
    NVIC_Init(&NVIC_InitStruct) ;
    
}

配置NVIC_Config()的目的是選擇中斷源的優(yōu)先級以及打開中斷通道堪唐,主要功能通過配置NVIC初始化結(jié)構(gòu)體==NVIC_InitStruct==來完成。通俗的講翎蹈,STM32中有很多中斷淮菠,而當(dāng)有多個(gè)中斷同時(shí)發(fā)生時(shí)就涉及到中斷執(zhí)行的先后問題了,所以引入了中斷優(yōu)先級的概念荤堪,中斷優(yōu)先級越高中斷就越先執(zhí)行合陵。在這里我們只討論外部中斷的優(yōu)先級,在 NVIC 有一個(gè)專門的寄存器:中斷優(yōu)先級寄存器 NVIC_IPRx澄阳,用來配置外部中斷的優(yōu)先級拥知。優(yōu)先級高低的比較包括搶占優(yōu)先級和子優(yōu)先級,先比較搶占優(yōu)先級碎赢,如果搶占優(yōu)先級相同就比較子優(yōu)先級低剔,從而得出中斷之間的優(yōu)先級高低。==NVIC的主要任務(wù)就是給對應(yīng)的中斷源分配中斷優(yōu)先級肮塞。== 中斷優(yōu)先級分配的原理繁雜户侥,但固件庫編程的好處就是化繁為簡,我們只需要按照NVIC_InitStruct()中的內(nèi)容進(jìn)行配置就行峦嗤。

接下來簡單講解一下NVIC_Config()函數(shù)的內(nèi)容:
==1.首先設(shè)置中斷優(yōu)先級分組==
中斷優(yōu)先級分組其實(shí)是確立一個(gè)大綱蕊唐,中斷優(yōu)先級寄存器 NVIC_IPRx中有4個(gè)位用來確定優(yōu)先級,中斷優(yōu)先級的分組就是把這4個(gè)位分配在搶占優(yōu)先級和子優(yōu)先級中烁设。比如設(shè)定一個(gè)位配置搶占優(yōu)先級替梨,其余三個(gè)位配置子優(yōu)先級。通過函數(shù)==NVIC_PriorityGroupConfig() ;== 實(shí)現(xiàn)分組装黑,詳細(xì)代碼如下:

1 /**
2 * 配置中斷優(yōu)先級分組:搶占優(yōu)先級和子優(yōu)先級
3 * 形參如下:
4 * @arg NVIC_PriorityGroup_0: 0bit for 搶占優(yōu)先級
5 *                            4 bits for 子優(yōu)先級
6 * @arg NVIC_PriorityGroup_1: 1 bit for 搶占優(yōu)先級
7 *                            3 bits for 子優(yōu)先級
8 * @arg NVIC_PriorityGroup_2: 2 bit for 
9 *                            2 bits for 子優(yōu)先級
10 * @arg NVIC_PriorityGroup_3: 3 bit for 搶占優(yōu)先級
11 *                           1 bits for 子優(yōu)先級
12 * @arg NVIC_PriorityGroup_4: 4 bit for 搶占優(yōu)先級
13 *                           0 bits for 子優(yōu)先級
14 * @注意 如果優(yōu)先級分組為 0副瀑,則搶占優(yōu)先級就不存在,優(yōu)先級就全部由子優(yōu)先級控制
15 */
16 void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
17 {
18 // 設(shè)置優(yōu)先級分組
19 SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
20 }

2.優(yōu)先級分組完畢后恋谭,是==配置NVIC初始化結(jié)構(gòu)體==

typedef struct {
2 uint8_t NVIC_IRQChannel; // 中斷源
3 uint8_t NVIC_IRQChannelPreemptionPriority; // 搶占優(yōu)先級
4 uint8_t NVIC_IRQChannelSubPriority; // 子優(yōu)先級
5 FunctionalState NVIC_IRQChannelCmd; // 中斷使能或者失能
6 } NVIC_InitTypeDef;

初始化結(jié)構(gòu)體的作用是糠睡,收集中斷源的信息(包括配置的是哪一個(gè)中斷源、中斷源的搶占優(yōu)先級是多少疚颊、中斷源的子優(yōu)先級是多少狈孔、中斷源的使能是否開啟)。
NVIC_IROChannel:用來設(shè)置中斷源材义,不同的中斷中斷源不一樣均抽,且不可寫錯(cuò),即使寫錯(cuò)了程序也不會報(bào)錯(cuò)其掂,只會導(dǎo)致不響應(yīng)中斷油挥。 ==stm32f10x.h 頭文件里面的 IRQn_Type 結(jié)構(gòu)體定義,這個(gè)結(jié)構(gòu)體包含了所有的中斷源。==
NVIC_IRQChannelPreemptionPriority和NVIC_IRQChannelSubPriority 分別設(shè)置搶占優(yōu)先級和子優(yōu)先級深寥,具體的值要根據(jù)中斷優(yōu)先級分組來確定攘乒。
NVIC_IRQChannelCmd:設(shè)置中斷使能(ENABLE)或者失能(DISABLE),相當(dāng)于一個(gè)電源總開關(guān)惋鹅。
3.最后借助NVIC初始化函數(shù)將NVIC初始化結(jié)構(gòu)體中的信息寫入相應(yīng)的寄存器中 (體現(xiàn)了固件庫編程的優(yōu)點(diǎn)则酝,不需要我們深入到寄存器層次去,只需要掌握相應(yīng)函數(shù)的配置即可)

==配置EXTI_Config()函數(shù)==

EXTI(External interrupt/event controller):外部中斷/事件控制器负饲,管理了控制器的 20個(gè)中斷/事件線堤魁。每個(gè)中斷/事件線都對應(yīng)有一個(gè)邊沿檢測器,可以實(shí)現(xiàn)輸入信號的上升沿檢測和下降沿的檢測返十。 EXTI 可以實(shí)現(xiàn)對每個(gè)中斷/事件線進(jìn)行單獨(dú)配置妥泉,可以單獨(dú)配置為中斷或者事件,以及觸發(fā)事件的屬性洞坑。
按我的理解盲链,EXTI是一個(gè)有著多達(dá)20個(gè)接口的控制器,它可以為每一個(gè)接入接口的信號源配置中斷(或事件)線迟杂、設(shè)置信號的檢測方式刽沾、設(shè)置觸發(fā)事件的性質(zhì),也就是說排拷,==傳入EXTI的僅僅是一個(gè)信號侧漓,EXTI的功能就是根據(jù)信號傳入的“線”對信號做出相應(yīng)的處理,然后將處理后的信號轉(zhuǎn)向NVIC监氢。== 就像一個(gè)分揀機(jī)器布蔗,傳入的東西經(jīng)過篩選處理被送往不同的地方,只是EXTI分揀的是信號罷了浪腐。 ==如果說NVIC是配置中斷源纵揍,那么EXTI就是向NVIC傳送中斷信號。==

EXTI功能框圖:

在這里插入圖片描述
EXTI 可分為兩大部分功能议街,一個(gè)是產(chǎn)生中斷泽谨,另一個(gè)是產(chǎn)生事件,線路1-2-4-5是產(chǎn)生中斷的流程特漩,20/代表著有20條相同的線路吧雹。

接下來講解一下EXTI_Config()函數(shù)代碼:

void EXTI_Config() /* 主要是連接EXTI與GPIO */
{
    GPIO_InitTypeDef GPIO_InitStruct ;
    EXTI_InitTypeDef EXTI_InitStruct ;
    
    NVIC_Config();

    /* 初始化要與EXTI連接的GPIO */
    /* 開啟GPIOA與GPIOC的時(shí)鐘 */
    RCC_APB2PeriphClockCmd(KEY1_EXTI_GPIO_CLK | KEY2_EXTI_GPIO_CLK, ENABLE) ;
    
    GPIO_InitStruct.GPIO_Pin = KEY1_EXTI_GPIO_PIN ;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
    GPIO_Init(KEY1_EXTI_GPIO_PORT , &GPIO_InitStruct) ;
    
    GPIO_InitStruct.GPIO_Pin = KEY2_EXTI_GPIO_PIN ;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
    GPIO_Init(KEY2_EXTI_GPIO_PORT , &GPIO_InitStruct) ;
    
    /* 初始化EXTI外設(shè) */
    /* EXTI的時(shí)鐘要設(shè)置AFIO寄存器 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE) ;
    /* 選擇作為EXTI線的GPIO引腳 */
    GPIO_EXTILineConfig( KEY1_GPIO_PORTSOURCE , KEY1_GPIO_PINSOURCE) ;
    /* 配置中斷or事件線 */
    EXTI_InitStruct.EXTI_Line = KEY1_EXTI_LINE ;
    /* 使能EXTI線 */
    EXTI_InitStruct.EXTI_LineCmd = ENABLE ;
    /* 配置模式:中斷or事件 */
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt ;
    /* 配置邊沿觸發(fā) 上升or下降 */
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising ;
    EXTI_Init(&EXTI_InitStruct) ;
    
    GPIO_EXTILineConfig( KEY2_GPIO_PORTSOURCE , KEY2_GPIO_PINSOURCE) ;
    EXTI_InitStruct.EXTI_Line = KEY2_EXTI_LINE ;
    EXTI_InitStruct.EXTI_LineCmd = ENABLE ;
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt ;
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling ;
    EXTI_Init(&EXTI_InitStruct);
}

代碼可大體分為三部分:
配置GPIO相應(yīng)引腳、配置EXTI并連接GPIO引腳拾稳、傳入NVIC_Config()
==1.配置GPIO相應(yīng)引腳==
該代碼是通過按鍵產(chǎn)生一個(gè)電平信號吮炕,然后經(jīng)EXTI處理傳入NVIC產(chǎn)生中斷的,所以要配置連接按鍵的GPIO引腳访得,主要是設(shè)置相應(yīng)的引腳模式為浮空輸入 。老規(guī)矩,先開啟相應(yīng)GPIO的時(shí)鐘悍抑,然后配置引腳初始化結(jié)構(gòu)體鳄炉,再利用初始化函數(shù)將初始化結(jié)構(gòu)體寫入寄存器中。
==2.配置EXTI并連接GPIO引腳==
要操作外設(shè)搜骡,首先要打開相關(guān)的時(shí)鐘拂盯,==EXTI掛載在APB2總線上,并且開啟時(shí)鐘時(shí)要操作AFIO寄存器== 记靡,準(zhǔn)備工作就緒后連接GPIO相應(yīng)的引腳到EXTI中谈竿,前面說了EXTI有20個(gè)接口,所以特定的引腳有特定的接口摸吠,所以要根據(jù)GPIO_EXTILineConfig()空凸;函數(shù)選擇用作EXTI線的GPIO引腳,函數(shù)說明如下

/**
  * @brief  Selects the GPIO pin used as EXTI Line.
  * @param  GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines.
  *   This parameter can be GPIO_PortSourceGPIOx where x can be (A..G).
  * @param  GPIO_PinSource: specifies the EXTI line to be configured.
  *   This parameter can be GPIO_PinSourcex where x can be (0..15).
  * @retval None
  */
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
{
  uint32_t tmp = 0x00;
  /* Check the parameters */
  assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
  assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
  
  tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));
  AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
  AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));
}

其實(shí)對應(yīng)的==EXTI線就對應(yīng)GPIO引腳號==寸痢,這樣看起來還比較直觀呀洲。
連接好GPIO引腳與EXTI后就該配置EXTI的初始化結(jié)構(gòu)體了,結(jié)構(gòu)體如下:

typedef struct 
{
     uint32_t EXTI_Line; // 中斷/事件線
     EXTIMode_TypeDef EXTI_Mode; // EXTI 模式
     EXTITrigger_TypeDef EXTI_Trigger; // 觸發(fā)類型
     FunctionalState EXTI_LineCmd; // EXTI 使能
 } EXTI_InitTypeDef;

配置此結(jié)構(gòu)體主要是:選擇相應(yīng)的==EXTI線== 啼止、選擇觸發(fā)模式道逗、選擇產(chǎn)生的結(jié)果(中斷還是事件)、是否使能EXTI線献烦。
EXTI_Line:中斷線選擇滓窍,可選 EXTI_0 至 EXTI_19(一共20個(gè))。既然剛才配置好了與GPIO引腳對應(yīng)的EXTI線巩那,所以初始化結(jié)構(gòu)體中的EXTI線就是與GPIO連接的那個(gè)線吏夯。
EXTI_Mode: EXTI 模式選擇,可選為產(chǎn)生中斷或者產(chǎn)生事件拢操。就是決定信號的發(fā)展方向锦亦,是產(chǎn)生中斷呢?還是產(chǎn)生事件呢令境?此處是中斷杠园。
EXTI_Trigger: EXTI 邊沿觸發(fā)模式,可選上升沿觸發(fā)舔庶、下降 沿 觸 發(fā) 或 者 上 升 沿 和 下 降 沿 都 觸 發(fā)抛蚁。觸發(fā)信號。
EXTI_LineCmd:控制是否使能 EXTI 線惕橙,可選使能 EXTI 線或禁用瞧甩。
初始化結(jié)構(gòu)體配置完畢后交由初始化函數(shù)寫入相應(yīng)的寄存器中。
==3.傳入NVIC_Config()==
之后就自動(dòng)傳入NVIC中了弥鹦。肚逸。爷辙。

==編寫中斷服務(wù)函數(shù)==

到這里就萬事俱備只欠東風(fēng)了,中斷的觸發(fā)與處理及優(yōu)先級定義都已經(jīng)安排上了朦促,最后一步就是編寫中斷函數(shù)的內(nèi)容了膝晾,只要進(jìn)入中斷就會執(zhí)行中斷函數(shù)中的代碼,所以這是收尾工作务冕。STM32的中斷服務(wù)函數(shù)不同于51單片機(jī)中的中斷服務(wù)函數(shù)血当,STM32的所有中斷函數(shù)都被偷偷安排了,==每個(gè)中斷都有其固定的名字禀忆,只有找到這個(gè)名字臊旭,在這個(gè)固定的函數(shù)名下編寫中斷服務(wù)函數(shù)才是有效的==,所有中斷函數(shù)的編寫都要在==stm32f10x_it.c== 中箩退,如示:


在這里插入圖片描述

從所給的信息可得知外設(shè)的中斷服務(wù)函數(shù)的名字都存放在==startup_stm32f10x_xx.s== 中离熏,而且是由匯編語言編寫,如示:
在這里插入圖片描述

可知EXTI線0到EXTI線4線都是單獨(dú)的中斷函數(shù)名乏德、EXTI線5到EXTI線9共用一個(gè)中斷函數(shù)名撤奸、EXTI線10線到EXTI線15線共用一個(gè)中斷函數(shù)名。
我們要做的就是==以相應(yīng)的EXTI線的中斷函數(shù)名字在stm32f10x_it.c中編寫中斷函數(shù)== 如下:
void EXTI0_IRQHandler(void)
{
    if(  EXTI_GetITStatus(KEY1_EXTI_LINE)!=RESET)
    {
        LED1_TOGGLE;   //LED1的亮滅狀態(tài)反轉(zhuǎn)
    }
        
    EXTI_ClearITPendingBit(KEY1_EXTI_LINE);
        
}


void EXTI15_10_IRQHandler(void)
{
    if(  EXTI_GetITStatus(KEY2_EXTI_LINE)!=RESET)
    {
        LED2_TOGGLE;   //LED2的亮滅狀態(tài)反轉(zhuǎn)
    }
        
    EXTI_ClearITPendingBit(KEY2_EXTI_LINE);
        
}

每次進(jìn)入中斷函數(shù)后喊括,==靠ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)讀取中斷是否執(zhí)行== 胧瓜,執(zhí)行完之后要利用==void EXTI_ClearITPendingBit(uint32_t EXTI_Line)清除清除中斷標(biāo)志位,以免不斷進(jìn)入中斷==

==大功告成==

到此完整的中斷系統(tǒng)就已經(jīng)完成郑什,主函數(shù)只需調(diào)用即可8!蘑拯!
(附上主函數(shù)及倆個(gè)頭文件)
==希望可以一起交流學(xué)習(xí)
qq:2723808286==

#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_key.h"

int main(void)
{ 
    LED_GPIO_Config();
    EXTI_Config();
    
    while(1) 
    {
    }
}


#ifndef __BSP_KEY_H
#define __BSP_KEY_H

#include "stm32f10x.h"

#define KEY1_EXTI_GPIO_CLK      RCC_APB2Periph_GPIOA
#define KEY1_EXTI_GPIO_PORT     GPIOA
#define KEY1_EXTI_GPIO_PIN      GPIO_Pin_0
#define KEY1_EXTI_IRQN          EXTI0_IRQn      /* 對應(yīng)著引腳號 */
#define KEY1_EXTI_LINE          EXTI_Line0      /* 中斷钝满、事件線對應(yīng)引腳號 */
#define KEY1_GPIO_PORTSOURCE    GPIO_PortSourceGPIOA
#define KEY1_GPIO_PINSOURCE     GPIO_PinSource0
#define  KEY1_EXTI_IRQHANDLER       EXTI0_IRQHandler

#define KEY2_EXTI_GPIO_CLK      RCC_APB2Periph_GPIOC
#define KEY2_EXTI_GPIO_PORT     GPIOC
#define KEY2_EXTI_GPIO_PIN      GPIO_Pin_13
#define KEY2_EXTI_IRQN          EXTI15_10_IRQn
#define KEY2_EXTI_LINE          EXTI_Line13
#define KEY2_GPIO_PORTSOURCE    GPIO_PortSourceGPIOC
#define KEY2_GPIO_PINSOURCE     GPIO_PinSource13
#define  KEY2_EXTI_IRQHANDLER       EXTI15_10_IRQHandler


void EXTI_Config(void);
    
#endif

#ifndef __BSP_LED_H
#define __BSP_LED_H

#include "stm32f10x.h"



#define LED1_GPIO_CLK   RCC_APB2Periph_GPIOC   /*時(shí)鐘*/
#define LED1_GPIO_PORT  GPIOC                  /*端口*/
#define LED1_GPIO_PIN   GPIO_Pin_2             /*引腳*/


#define LED2_GPIO_PIN   GPIO_Pin_3
#define LED2_GPIO_CLK   RCC_APB2Periph_GPIOC
#define LED2_GPIO_PORT  GPIOC

#define digitalTOGGLE(p,i)     {p->ODR ^=i;}
#define LED1_TOGGLE            digitalTOGGLE(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED2_TOGGLE            digitalTOGGLE(LED2_GPIO_PORT,LED2_GPIO_PIN)  /* LED狀態(tài)反轉(zhuǎn) */
 void LED_GPIO_Config(void);                   

#endif


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市申窘,隨后出現(xiàn)的幾起案子弯蚜,更是在濱河造成了極大的恐慌,老刑警劉巖剃法,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碎捺,死亡現(xiàn)場離奇詭異,居然都是意外死亡贷洲,警方通過查閱死者的電腦和手機(jī)收厨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來优构,“玉大人诵叁,你說我怎么就攤上這事∏胀郑” “怎么了拧额?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵碑诉,是天一觀的道長。 經(jīng)常有香客問我势腮,道長联贩,這世上最難降的妖魔是什么漫仆? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任捎拯,我火速辦了婚禮,結(jié)果婚禮上盲厌,老公的妹妹穿的比我還像新娘署照。我一直安慰自己,他們只是感情好吗浩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布建芙。 她就那樣靜靜地躺著,像睡著了一般懂扼。 火紅的嫁衣襯著肌膚如雪禁荸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天阀湿,我揣著相機(jī)與錄音赶熟,去河邊找鬼。 笑死陷嘴,一個(gè)胖子當(dāng)著我的面吹牛映砖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灾挨,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼邑退,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了劳澄?” 一聲冷哼從身側(cè)響起地技,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秒拔,沒想到半個(gè)月后莫矗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溯警,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年趣苏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梯轻。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡食磕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喳挑,到底是詐尸還是另有隱情彬伦,我是刑警寧澤滔悉,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站单绑,受9級特大地震影響回官,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搂橙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一歉提、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧区转,春花似錦苔巨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜻韭,卻和暖如春悼尾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肖方。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工闺魏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窥妇。 一個(gè)月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓舷胜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親活翩。 傳聞我的和親對象是個(gè)殘疾皇子烹骨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容