stm32单片机屏幕一直闪_STM32使用HAL库函数点亮OLED
OLED屏幕應用十分廣泛,我們可以使用STM32單片機對其進行控制,使其顯示我們需要的各種數字、字母、漢字、圖畫等。我們此次使用下圖這款非常普遍的0.96寸OLED液晶屏。此款OLED屏采用IIC的通訊協議,與STM32單片機的IIC1模塊連接進行通訊。
IIC接口的0.96OLED屏
首先我們要對單片機進行基本的時鐘、IIC通訊設置。ST推出的STM32CUBEIDE使我們可以通過圖形界面的很方便的設置單片機的時鐘、IIC外設的基本參數。我們設置的時鐘參數、IIC外設參數詳見下圖。
STM32單片機的時鐘配置
STM32單片機中IIC配置
設置完上述基本參數后我們點擊STM32CUBE中的代碼生成,可以生成基礎代碼。對于OLED驅動代碼,網上有好多例程或者買部件時商家也會提供,這些代碼我們可以加以參考。但這些驅動代碼大多為IO口模擬的IIC操作屏幕,我們使用HAL庫函數需要對驅動代碼中的命令發送函數部分,數據發送函數部分加以修改。HAL庫中把IIC通訊協議做了集成封裝,使我們不需要特別了解IIC通訊的具體步驟及具體形式,只要弄清幾個參數就可以使我們初學者快速上手,實現兩設備之間的IIC的通訊。但是當熟悉后還是建議系統的學習下IIC通訊,這樣我們使用其它單片機時也可輕松應對。下面屏蔽掉的代碼為OLED驅動歷程中的IO口模擬IIC通訊的整個過程,即:發送開始指令、發送設備地址、等待應答、發送設備中內存地址、等待應答、發送具體指令、等待應答、發送結束指令。庫函數HAL_I2C_Mem_Write()已經封裝了以上IIC通訊間的所有指令,我們直接調用此函數即可。修改的驅動代碼具體如下:
void Write_IIC_Command(unsigned char IIC_Command){ /*IIC_Start(); Write_IIC_Byte(0x78); //Slave address,SA0=0IIC_Wait_Ack(); Write_IIC_Byte(0x00);//write commandIIC_Wait_Ack(); Write_IIC_Byte(IIC_Command);IIC_Wait_Ack(); IIC_Stop();*/ HAL_I2C_Mem_Write(&hi2c1, 0x78, 0x00, I2C_MEMADD_SIZE_8BIT, &IIC_Command, 1, 100);}void Write_IIC_Data(unsigned char IIC_Data){ /*IIC_Start(); Write_IIC_Byte(0x78);//D/C#=0; R/W#=0IIC_Wait_Ack(); Write_IIC_Byte(0x40);//write dataIIC_Wait_Ack(); Write_IIC_Byte(IIC_Data);IIC_Wait_Ack(); IIC_Stop();*/HAL_I2C_Mem_Write(&hi2c1, 0x78, 0x40, I2C_MEMADD_SIZE_8BIT, &IIC_Data, 1, 100);}修改完上述代碼后單片機就可以與OLED屏進行通訊。但如果想要OLED顯示具體內容的話,我們還需向OLED發送相應內容的點陣代碼。點陣代碼可以通過字摸提取軟件進行生成。提取內容見下圖:
漢字字模提取
圖片的字模提取
小魚圖片字模提取后生成的點陣代碼
最后我們可以把這些提取的字模代碼寫入單片機的頭文件,就可以使用OLED驅動程序中的字符串發送函數、漢字發送函數、圖片發送函數來控制OLED屏幕。具體可點擊后面鏈接查看實物視頻 STM32單片機HAL庫點亮OLED
顯示數字、英文、漢字
顯示小魚圖像
總結
以上是生活随笔為你收集整理的stm32单片机屏幕一直闪_STM32使用HAL库函数点亮OLED的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现3d图片移动_「3D建模」什么是动画
- 下一篇: magisk下载里显示没有模块_重大更新