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

上面僅是一部分常用的基礎(chǔ)指令,更多更仔細(xì)的指令或者函數(shù)可以訪問陶晶馳資料官網(wǎng)。
硬件和接線
硬件需要一塊STM32F103C8T6的開發(fā)板,杜邦線諾干,2.4寸串口屏一塊
接線
| 串口屏 | STM32 |
|---|---|
| +5V | 5V |
| TX | PA10 |
| RX | PA9 |
| GND | GND |
實(shí)驗(yàn)前準(zhǔn)備
準(zhǔn)備前需要下載出廠標(biāo)準(zhǔn)樣例,一般出廠自帶的,不需要下載,需要下載的可以參考以前的文章:[51單片機(jī)驅(qū)動(dòng)HMI串口屏,串口屏的下載方式]
STM32程序
串口程序
串口配置
void uart_init(u32 bound){
//GPIO端口設(shè)置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA時(shí)鐘
USART_DeInit(USART1); //復(fù)位串口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; //復(fù)用推挽輸出
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)先級(jí)3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子優(yōu)先級(jí)3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根據(jù)指定的參數(shù)初始化VIC寄存器
//USART 初始化設(shè)置
USART_InitStructure.USART_BaudRate = bound;//一般設(shè)置為9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長(zhǎng)為8位數(shù)據(jù)格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個(gè)停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//無奇偶校驗(yàn)位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制
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); //使能串口
}
中斷服務(wù)程序
void USART1_IRQHandler(void) //串口1中斷服務(wù)程序
{
u8 Res;
#ifdef OS_TICKS_PER_SEC //如果時(shí)鐘節(jié)拍數(shù)定義了,說明要使用ucosII了.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)
{
Res =USART_ReceiveData(USART1);//(USART1- >DR); //讀取接收到的數(shù)據(jù)
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//接收錯(cuò)誤,重新開始
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ù)據(jù)錯(cuò)誤,重新開始接收
}
}
}
}
主函數(shù)
主函數(shù)
int main(void)
{
delay_init(); //延時(shí)函數(shù)初始化
NVIC_Configuration(); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
uart_init(9600); //串口初始化為9600
HMISendstart(); //為確保串口HMI正常通信
{
HMISends("cls RED"); //發(fā)送串口指令
HMISendb(0xff); //發(fā)送結(jié)束符 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="春風(fēng)不度玉門關(guān)"");
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ā)送一個(gè)字節(jié)
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};//等待發(fā)送結(jié)束
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ā)送一個(gè)字節(jié)
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};//等待發(fā)送結(jié)束
}
else
return ;
}
}
實(shí)驗(yàn)現(xiàn)象
現(xiàn)象是紅綠藍(lán)黑各顯示一秒,最后去除原來工程里面春風(fēng)不度玉門關(guān)的背景色
總結(jié)
串口屏的驅(qū)動(dòng)只需要配置好單片機(jī)的串口就行,其他的就是發(fā)送函數(shù)的代碼,還是老樣子需要整理好的代碼可以在評(píng)論區(qū)留言或私信郵箱!
審核編輯 黃宇
-
STM32
+關(guān)注
關(guān)注
2309文章
11162瀏覽量
373399 -
串口屏
+關(guān)注
關(guān)注
8文章
621瀏覽量
39495
發(fā)布評(píng)論請(qǐng)先 登錄
就各位大神點(diǎn)撥一下串口通信
串口調(diào)試步驟(適合免驅(qū)動(dòng)的232串口設(shè)備)
f103c8t6使用adc采樣時(shí)程序無法正常工作怎么解決?
關(guān)于stm32f4zgt6和mspm0g3507串口通信問題
STM32F103C8T6無法選擇外部晶振怎么解決?
如何選擇國(guó)產(chǎn)串口屏
STM32驅(qū)動(dòng)串口屏,STM32F103C8T6串口發(fā)送指令控制HMI串口屏
評(píng)論