利用stm32串口中斷進行數位管顯示

來源:互聯網
上載者:User

為了使得本次實驗的效果更加明顯,我將利用串口中斷,在中斷服務程式中讀取串口輸入的數值,然後在數位管上顯示出該數值。

一、數位管配置

         在進行本次的實驗之前,由於需要使用數位管進行實驗結果的顯示,我們首先需要數位管的真值表,我這邊使用的是普通的共陽極數位管,所以真值表如下:

        

0

1

2

3

4

5

6

7

0xc0

0xf9

0xA4

0xB0

0x99

0x92

0x82

0xF8

8

9

a

b

c

d

e

f

0x80

0x90

0x88

0x83

0xC6

0xA1

0x86

0x8E


 
 
 
 
 
 
 
 

   以上準備工作完成以後,可以正式進入本次實驗了。很明顯,我們用到了數位管和串口,因此我們至少需要數位管配置函數以及串口配置函數這兩個配置函數。對於數位管的配置函數,由於我使用的普中PZ6806L型的開發板,通過查詢原理圖發現數位管的各個段對應於LED1~LED8,然後接到GPIOC的0~7管腳上,因此配置好GPIOC就可以了,這個簡單,直接給出代碼如下: void segmentDisplayInit() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); } 二、串口配置 下面是本次實驗的重點,也就是RS232串口中斷配置函數usartInit(),在《STM32中文參考手冊》中對USART的描述如下: 通用同步非同步收發器(USART)提供了一種靈活的方法與使用工業標準NRZ非同步串列資料格式的外部裝置之間進行全雙工系統資料交換。USART利用分數傳輸速率發生器提供寬範圍的傳輸速率 選擇。它支援同步單向通訊和半雙工單線通訊,也支援LIN(局部互連網),智慧卡協議和IrDA(紅外資料群組織)SIR ENDEC規範,以及數據機(CTS/RTS)操作。它還允許多處理器 通訊。 串口通訊一般有三種形式,即查詢方式、中斷方式和DMA方式。查詢方式(也有人稱為輪詢法)效率不高,在需要查詢時CPU的佔用很高,在程式上的體現就是用迴圈不斷 查詢標誌位狀態,在查詢時CPU不做其他事,因此效率是比較低的。中斷方式的話,只有在發送中斷、接收中斷、傳輸完成中斷等的中斷時會進入串口中斷服務程式,這樣CPU就 不用等在那兒,該幹嘛幹嘛,大大提高了效率,因此本次實驗採用中斷方式。而DMA方式的話,由於在微機原理課程中沒有進行相關知識的學習,故瞭解不多,不敢進行評論。 在串口中斷初始化配置中,首先應開啟串口時鐘和PA口的時鐘(AFIO的時鐘可以不用開啟),開啟PA口時鐘的原因是,在本實驗中,我使用的板子在原理圖上顯示,RS232串口的 RX和TX分別與PA10和PA9相連。接著就該根據TX、RX配置PA9和PA10這兩個GPIO了,這裡要注意的是這裡模式最好要設定成浮空輸入和複用推挽輸出,至少按下表設定: 接下來就要調用USART_Init()程式對串口進行參數配置,該函數的入口參數是一個結構體指標USART_InitTypeDef*,查詢stm32f10x_usart.h可得,該結構體定義如下: typedef struct {   uint32_t USART_BaudRate;  //傳輸速率,一般9600即可   uint16_t USART_WordLength;//字長八位或九位   uint16_t USART_StopBits;   //停止位選擇   uint16_t USART_Parity;  //同位   uint16_t USART_Mode;  //模式,發送還是接收   uint16_t USART_HardwareFlowControl;//硬體控制流程,一般設定為NONE }USART_InitTypeDef; 接著開啟串口,使用USART_Cmd(USART1,ENABLE);即可。 然後開啟串口中斷,這裡我開啟接收中斷,函數如下: USART_ITConfig(USART1,USART_IT_RXNE, ENABLE); 最後配置串口中斷的優先順序,這個配置在上一篇定時器中斷的配置中已經介紹過了,這裡不再贅述。 綜合以上幾點usart總的配置函數給出如下: void usartInit() { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //時鐘配置 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE); //TX和RX對應GPIO的初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); //串口基本參數初始化 USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_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_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //串口中斷優先順序配置 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } 三、串口中斷函數 在此函數中只要檢測輸入的資料,然後將對應的數位管真值表的值寫到GPIOC上即可。這裡直接給出程式: void USART1_IRQHandler(void) { static u8 k; int seg[] = {0xc0 , 0xf9 , 0xA4 , 0xB0 , 0x99 , 0x92 , 0x82 , 0xF8 , 0x80  , 0x90 , 0x88 , 0x83 , 0xC6 , 0xA1 , 0x86 , 0x8E}; USART_ClearFlag(USART1 , USART_FLAG_TC); if(USART_GetITStatus(USART1 , USART_IT_RXNE) != Bit_RESET) { k = USART_ReceiveData(USART1); GPIO_Write(GPIOC , seg[k]); } } 主函數很簡單,這裡就不給出了。

 
 
 
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.