目錄
一、HAL庫中斷點亮LED燈
1.建專案部分
2、代碼部分
3.運行結果
二、HAL庫中斷串口通信
1.專案
2.代碼部分
三、采用串口DMA發送用特定速率向上位機連續發送資料
1.專案
2.代碼
3.燒錄及結果
一、HAL庫中斷點亮LED燈
1.建專案部分
1.新建專案
file->new project
2.選擇芯片
選擇STM32F103C8
3.找到PA9,選擇為GPIO——EXTI5中斷模式

4.選擇PA1設定為GPIO_Output輸出模式

5.設定引腳

PA1設定high

6.設定RCC和SYS


7,設定開啟中斷

8.設定時鐘樹

9.專案命名,然后生成專案

2、代碼部分
在main.c添加
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* Prevent unused argument(s) compilation warning */
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1); //翻轉電平
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Callback could be implemented in the user file
*/
}
3.運行結果

二、HAL庫中斷串口通信
1.專案
1.新建專案并設定usart1

設定sys和rcc(與以上一樣)
2. 設定USART1使能中斷

3.重復設定時鐘樹,專案命名,然后生成專案

2.代碼部分
1.在main.c代碼中添加
#define LENGTH 10 // 接識訓沖區大小
//定義緩沖區和標志位
uint8_t RxBuffer[LENGTH]; // 接識訓沖區
uint8_t Rxflag = 0; // 標志位,0為接收未完成,1為接
HAL_UART_Receive_IT(&huart1, (uint8_t*)RxBuffer, LENGTH); // 使能接收中斷
char data[] = "\nSuccess\n"; // 接收成功資訊
2.在while中添加
if (Rxflag == 1){ // 若資料接收完成
Rxflag = 0; // 清除標志位
HAL_UART_Transmit(&huart1, (uint8_t *)data, 18, 0xFFFF); // 接收成功資訊
// 發送接收到的字符
HAL_UART_Transmit_IT(&huart1, (uint8_t*)RxBuffer, LENGTH);
}
3.在main.c中定義回呼函式
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if (huart->Instance == USART1){
Rxflag = 1; // 設定標志位為1
HAL_UART_Receive_IT(&huart1, (uint8_t*)&RxBuffer, LENGTH); // 使能接收中斷
}
}
4.燒錄

結果

三、采用串口DMA發送用特定速率向上位機連續發送資料
1.專案
1.創建專案
RCC配置時鐘和SYS配置,時鐘樹,usart1設定步驟同上
2.使能中斷


3.生成檔案如上


2.代碼
1.在while回圈中添加
uint8_t data[] = "HELLO\r\n";
HAL_UART_Transmit_DMA(&huart1,(uint8_t *)data,30);
HAL_Delay(1000); //
2.生成hex

3.燒錄及結果

結果

總結:
我明白了STM32的中斷有兩種優先級即搶占式優先級 和回應式優先級,搶占式優先級的具有高搶占式優先級的中斷可以在具有低搶占式優先級的中斷處理程序中被回應也就是中斷嵌套,而回應式優先級的特點是當兩個中斷源的搶占式優先級相同時,高回應優先級的中斷優先被回應,這兩個中斷將沒有嵌套關系以及當兩個中斷源的搶占式優先級.
參考文獻:
STM32之中斷方式實作串口通信_Baker的博客-CSDN博客
STM32之中斷控制LED燈_Baker的博客-CSDN博客
【STM32開發】STM32外部中斷 - 知乎 (zhihu.com)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/354750.html
標籤:其他
上一篇:STM32中斷,使LED燈亮與滅和串口中斷以及STM32采用串口DMA方式,用115200bps或更高速率向上位機連續發送資料。
下一篇:眾昂礦業深度系結磷酸鐵鋰材料
