串口屏
串口屏是一個集成了單片機的屏幕模塊,采用的是TTL串口協(xié)議,可以直接通過對應指令控制屏幕,
本文采用的串口屏是陶晶馳T0系列的基本型,目的是通過單片機的串口來控制串口屏。
基礎指令集

上面僅是一部分常用的基礎指令,更多更仔細的指令或者函數(shù)可以訪問陶晶馳資料官網。
硬件和接線
硬件需要一塊STM32F103C8T6的開發(fā)板,杜邦線諾干,2.4寸串口屏一塊
接線
| 串口屏 | STM32 |
|---|---|
| +5V | 5V |
| TX | PA10 |
| RX | PA9 |
| GND | GND |
實驗前準備
準備前需要下載出廠標準樣例,一般出廠自帶的,不需要下載,需要下載的可以參考以前的文章:[51單片機驅動HMI串口屏,串口屏的下載方式]
STM32程序
串口程序
串口配置
void uart_init(u32 bound){
//GPIO端口設置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA時鐘
USART_DeInit(USART1); //復位串口1
//USART1_TX PA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9
//USART1_RX PA.10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA10
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//搶占優(yōu)先級3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子優(yōu)先級3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根據指定的參數(shù)初始化VIC寄存器
//USART 初始化設置
USART_InitStructure.USART_BaudRate = bound;//一般設置為9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為8位數(shù)據格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//無奇偶校驗位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數(shù)據流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發(fā)模式
USART_Init(USART1, &USART_InitStructure); //初始化串口
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開啟中斷
USART_Cmd(USART1, ENABLE); //使能串口
}
中斷服務程序
void USART1_IRQHandler(void) //串口1中斷服務程序
{
u8 Res;
#ifdef OS_TICKS_PER_SEC //如果時鐘節(jié)拍數(shù)定義了,說明要使用ucosII了.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中斷(接收到的數(shù)據必須是0x0d 0x0a結尾)
{
Res =USART_ReceiveData(USART1);//(USART1- >DR); //讀取接收到的數(shù)據
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//接收錯誤,重新開始
else USART_RX_STA|=0x8000; //接收完成了
}
else //還沒收到0X0D
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA >(USART_REC_LEN-1))USART_RX_STA=0;//接收數(shù)據錯誤,重新開始接收
}
}
}
}
主函數(shù)
主函數(shù)
int main(void)
{
delay_init(); //延時函數(shù)初始化
NVIC_Configuration(); //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
uart_init(9600); //串口初始化為9600
HMISendstart(); //為確保串口HMI正常通信
{
HMISends("cls RED"); //發(fā)送串口指令
HMISendb(0xff); //發(fā)送結束符 0XFF 0XFF 0XFF
delay_ms(1000);
HMISends("cls GREEN");
HMISendb(0xff);
delay_ms(1000);
HMISends("cls BLUE");
HMISendb(0xff);
delay_ms(1000);
HMISends("cls BLACK");
HMISendb(0xff);
delay_ms(1000);
HMISends("page 4");
HMISendb(0xff);
HMISends("t0.txt="春風不度玉門關"");
HMISendb(0xff);
}
while(1);
}
字符串發(fā)送函數(shù)
void HMISends(char *buf1) //字符串發(fā)送函數(shù)
{
u8 i=0;
while(1)
{
if(buf1[i]!=0)
{
USART_SendData(USART1,buf1[i]); //發(fā)送一個字節(jié)
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};//等待發(fā)送結束
i++;
}
else
return ;
}
}```
字節(jié)發(fā)送函數(shù)
```c
void HMISendb(u8 k) //字節(jié)發(fā)送函數(shù)
{
u8 i;
for(i=0;i< 3;i++)
{
if(k!=0)
{
USART_SendData(USART1,k); //發(fā)送一個字節(jié)
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};//等待發(fā)送結束
}
else
return ;
}
}
實驗現(xiàn)象
現(xiàn)象是紅綠藍黑各顯示一秒,最后去除原來工程里面春風不度玉門關的背景色
總結
串口屏的驅動只需要配置好單片機的串口就行,其他的就是發(fā)送函數(shù)的代碼,還是老樣子需要整理好的代碼可以在評論區(qū)留言或私信郵箱!
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
STM32
+關注
關注
2309文章
11161瀏覽量
373386 -
串口屏
+關注
關注
8文章
621瀏覽量
39494
發(fā)布評論請先 登錄
相關推薦
熱點推薦
就各位大神點撥一下串口通信
我現(xiàn)在用的STM32F103C8T6通過串口度讀取西曼傳感的SDAM模塊。附件有他的產品手冊,我通過串口讀數(shù)據需要怎么寫狀態(tài)機?還有就是只能通過中斷來獲取數(shù)據么?我用的標準庫*附件:SDAM產品手冊.pdf
發(fā)表于 01-30 15:17
串口調試步驟(適合免驅動的232串口設備)
密碼切換到root超級管理下 apt update 更新插件 apt-get install cutecom 安裝系統(tǒng)自帶的串口調試工具 cutecom 輸入串口測試的指令會彈出一個圖形界面如下圖 32
f103c8t6使用adc采樣時程序無法正常工作怎么解決?
我在學習使用stm32f103c8t6的adc的使用時遇到了這個問題。
是按照教程一步一步操作的:這是教程地址:https://blog.csdn.net/WTF___000/article
發(fā)表于 10-13 07:25
關于stm32f4zgt6和mspm0g3507串口通信問題
本人在使用stm32f4zgt6和mspm0g3507串口通信時出現(xiàn)問題,情況如下:
m0芯片使用軟件超時解析進行數(shù)據接收,使用標準庫的transmit函數(shù)進行數(shù)據發(fā)送。
stm32使
發(fā)表于 09-01 11:11
STM32F103C8T6無法選擇外部晶振怎么解決?
我從網上購入了STM32F103C8T6的核心板,板上有外部晶振。但我使用STM32CubeMX生成項目時,卻無法選擇外部晶振(如下圖)。請問要在哪里設置才能選擇外部晶振呀?
發(fā)表于 04-28 07:03
STM32F103C8T6開發(fā)板最小系統(tǒng)原理圖
電子發(fā)燒友網站提供《STM32F103C8T6開發(fā)板最小系統(tǒng)原理圖》資料免費下載
發(fā)表于 03-24 09:09
?92次下載
STM32驅動串口屏,STM32F103C8T6串口發(fā)送指令控制HMI串口屏
評論