一、基礎知識
1、ide的配置
1.1 General Options->Target中設置Device選擇對應板子的ST設備。STM系列不需要安裝補丁包(addon)。iar的ide軟件會自帶stm系列所有的組件以及例程。

1.2 C/C++ Compiler->Preprocessor中配置

上面部分代表的是文件目錄結構下的頭文件地址。
下面部分有三行
STM32F10X_HD // MD、HD等根據板子來選擇。具體對照target中選擇的設備來定
USE_STDPERIPH_DRIVER // 這個是全部一樣的,表明使用標準外設
EMB_DEBUG // 這句在編譯調試階段使用EMB_DEBUG,在燒錄到板子上時使用EMB_FLASH
1.3 Linker->Config下勾選Override default。選擇對應目錄的icf文件

這個icf文件有兩個,可以放在相對目錄下,也可以使用絕對目錄。
STM32F10x_RAM.icf // 這個代表的是現在調試運行階段
STM32F10x_FLASH.icf // 這個代表的是現在是燒錄階段
1.4 Debugger->Setup模擬時選擇Simulator(模擬),通過板子來調試運行時選擇J-Link/J-Trace。

當選擇J-Link/J-Trace時,需要選擇J-Link/J-Trace->Connection->SWD

2、程序基本步驟
__disable_interrupt(); // 關閉所有中斷,在當前系統要使用中斷時使用。
SystemInit(); // 系統初始化,系統時鐘初始化
RccInit(); // 時鐘初始化配置
/* Vector entry configuration */ // 這兒是配置中斷入口的。在ram和flash下配置的中斷地址不一樣,簡稱重新映射(remap)
#ifndef EMB_FLASH
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
...... // 用戶程序代碼
__enable_interrupt(); // 這兒是呼應開頭的關閉中斷、這兒是使能中斷。
RccInit()
void RccInit()
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // 高速總線的時鐘外設配置。這兒配置的是DMA1。高速總線上可配置中斷、SRAM、CRC等。
RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2 | // 這兒是低速總線上的時鐘配置使能,啟用哪些外設的時鐘,這兒就或什么外設,像這兒就是使
RCC_APB1Periph_USART3, ENABLE); // USART2和USART3這兩個串口。
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | // 這兒是低速總線外設時鐘配置使能,像這兒就使能了GPIOA-F以及GPIO的復用功能AFIO。
RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE |
RCC_APB2Periph_GPIOF |
RCC_APB2Periph_AFIO, ENABLE);
}
3、基本工具的使用
3.1 電源

電源的作用是在使用仿真器時候給MCU供電。使用時候先看好板子的電壓范圍,一般是3.3V,需要考慮板子是否具有穩(wěn)壓設置。然后先調節(jié)電壓的大小,再接GND,后面再接正電源。一般小板子,不帶其他額外外設的情況下, 電流應該在毫安級。
無論是板子還是電源接線時候保持一個標準。就是顏色鮮亮的作為正極,比如紅色、黃色、橙色等。顏色偏暗色系的作為負極,比如黑色、藍色等。
一般是紅為正,黑為GND?;蛘甙诪檎?、黑為GND。
3.2 J-Link仿真器


J-Link仿真器上面圖片是接板子的,這個可以查看電路圖看到板子的J-Link接線。下面圖片是通過USB連接電腦。使用時候需要在電腦上下載J-Link驅動軟件。
3.3 二極管

發(fā)光二極管是我們經常使用的元件。在焊接到板子上之前,需要判斷二極管的正和負。
第一種是看二極管的造型,腿長的這邊是正極,腿短的這邊是負極。
第二種也是看,不是看腿長,是看二極管里面的樣子,像現在這樣,里面小的是正極,里面大的是負極。
第三種是最標準的方法,使用萬用表,旋鈕打到發(fā)光二極管測量。用萬用表的負極接到二極管的一端,用正極短時間接觸二極管的另外一端??慈f用表上電壓和電流。電壓一般在1.8V左右,二極管發(fā)光。說明正負極接的對。如果屏幕上沒顯示,二極管不亮,就證明正負極接反了。

二、時鐘RCC
主要是兩個配置,一個是系統時鐘的初始化、一個是啟用的外設設備的時鐘初始化
1、系統時鐘
SystemInit();
2、外設時鐘
void RccInit();
void RccInit()
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // 高速總線的時鐘外設配置。這兒配置的是DMA1。高速總線上可配置中斷、SRAM、CRC等。
RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2 | // 這兒是低速總線上的時鐘配置使能,啟用哪些外設的時鐘,這兒就或什么外設,像這兒就是使
RCC_APB1Periph_USART3, ENABLE); // USART2和USART3這兩個串口。
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | // 這兒是低速總線外設時鐘配置使能,像這兒就使能了GPIOA-F以及GPIO的復用功能AFIO。
RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE |
RCC_APB2Periph_GPIOF |
RCC_APB2Periph_AFIO, ENABLE);
}
三、中斷
1、中斷分為系統異常和外部中斷,中斷都要有優(yōu)先級。也就是說EXTI和NVIC是配套使用的。
優(yōu)先級先按照組來定義,每個組再定義優(yōu)先級。
2、key按鍵控制燈閃爍亮滅
2.1、源代碼
短接PB0和PC6引腳,按下KEY2即可控制LED2的亮滅
main.c
#include "stm32f10x_conf.h" // 一般main函數引用這個文件就可以包含所有引用。
void RCC_Configuration();
void NvicInit();
void LEDInit();
void KeyInit();
void main()
{
__disable_interrupt(); // 關閉所有中斷
SystemInit(); // 系統初始化
RCC_Configuration(); // 時鐘初始化
/***************** Interrupt vector remap *********************/
#ifndef EMB_FLASH
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECTOR_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NvicInit(); // NVIC configure
KeyInit(); // Key initialize
LEDInit(); // GPIO configure
__enable_interrupt(); // 使能中斷
while(1)
{}
}
/**
* 時鐘初始化設置。
*/
void RCC_Configuration()
{
/* GPIOB and GPIOC and APIO clock enable */
/* APIOB的PB0用作LED2的引腳控制,GPIOC的PC0用作按鍵KEY2的引腳控制,AFIO是GPIO引腳的復用功能,用作中短線 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
}
/**
* LED燈的引腳初始化
*/
void LEDInit()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
/****************** 打開PB0引腳,作為LED2燈的使能引腳 **********************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/**
* 中斷初始化
*/
void NvicInit()
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 組權限設置 當前只使用了一個中斷,所以不指定組的優(yōu)先級*/
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; // 開啟9_5中斷組
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 設置優(yōu)先級為0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/**
* 按鍵初始化
*/
void KeyInit()
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/* 配置PC6作為按鍵的引腳控制,按鍵使用的都是懸浮模式(FLOATING) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; // PC6
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 輸入懸浮模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure); // PC作為輸入
/* AFIO匹配GPIO引腳PC6作為中短線 */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);
/* 中斷初始化 */
EXTI_InitStructure.EXTI_Line = EXTI_Line6; // 配置中短線6(EXTI_Line6)
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // 中斷模式,另外一種是時間模式(EXTI_Mode_Event)
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 下降沿觸發(fā)
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
2.2、步驟:
第一步:
__disable_interrupt(); // 關閉所有中斷,如果當前需要使用中斷,第一步是關閉所有中斷
SystemInit(); // 系統時鐘初始化
第二步:
RCC_Configuration(); // 時鐘初始化,主要是使能GPIO口的時鐘,TIMER的時鐘等
/**
* 時鐘初始化設置。
*/
void RCC_Configuration()
{
/* GPIOB and GPIOC and APIO clock enable */
/* APIOB的PB0用作LED2的引腳控制,GPIOC的PC0用作按鍵KEY2的引腳控制,AFIO是GPIO引腳的復用功能,用作中短線 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
}
第三步:
這段是中斷時必須使用的,重新映射(端口重定義)。是讓中斷向量表在ram和flash中運行時的初始化地址不一樣。
/***************** Interrupt vector remap *********************/
#ifndef EMB_FLASH
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECTOR_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
第四步:
NvicInit(); // NVIC configure 中斷配置
KeyInit(); // Key initialize 按鍵配置
LEDInit(); // LED2 configure LED2的引腳初始化配置
第五步:
使能中斷
__enable_interrupt(); // 使能中斷
四、串口通信
1、兩個板子之間互相通信
這個例程實現的是兩個STM32F103的板子在兩臺電腦下的發(fā)送和接收數據。當接收到數據時,使能LED燈亮。
短接LED2引腳和PB0。可以控制燈的亮滅
1.1 主機
main.c
#include "stm32f10x_conf.h"
#include "misc.h"
void RCC_Configuration();
void NvicInit();
void GpioInit();
void Usart3Init();
void delay_ms(u32 i);
void DatSent();
void main()
{
__disable_interrupt(); // 關閉所有中斷
SystemInit(); // 系統初始化
RCC_Configuration(); // 時鐘初始化
/***************** Interrupt vector remap *********************/
#ifndef EMB_FLASH
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECTOR_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NvicInit(); // NVIC configure
GpioInit(); // GPIO configure
Usart3Init(); // Test communication
__enable_interrupt(); // 使能中斷
while(1)
{
delay_ms(100);
DatSent(); // 發(fā)送數據 主機發(fā)送
GPIOB->ODR^=GPIO_Pin_0;
}
}
/**
* 時鐘初始化設置。
*/
void RCC_Configuration()
{
/* USART3 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3 , ENABLE);
/* GPIOB and AFIO clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO, ENABLE);
}
/**
* GPIO引腳初始化
*/
void GpioInit()
{
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIOB的初始化,引腳是PB0,使用推挽模式 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void NvicInit()
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
/**************** NVIC配置: 使能USART3串口 *******************/
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void delay_ms(u32 i)
{
u32 temp;
SysTick->LOAD=9000*i; // 設置重裝數值, 72MHZ時
SysTick->CTRL=0X01; // 使能,減到零時無動作,采用外部時鐘源
SysTick->VAL=0; // 清零計數器
do
{
temp=SysTick->CTRL; // 讀取當前倒計數值
}
while((temp&0x01)&&(!(temp&(1<<16)))); // 等待時間到達
SysTick->CTRL=0; // 關閉計數器
SysTick->VAL=0; // 清空計數器
}
Usart3Init() USART3串口通訊初始化配置
void Usart3Init() //
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/************* USART3引腳配置 *********************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // TX(PB10) 配置
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; // RX(PB11) 配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
USART_DeInit(USART3);
/************* USART3模式配置 ********************/
USART_InitStructure.USART_BaudRate = 115200;
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_Rx | USART_Mode_Tx;
USART_Init(USART3,&USART_InitStructure);
USART_Cmd(USART3, ENABLE); // usart3 enable
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); // 使能USART_IT_RXNE中斷標識
}
```c
`DatSent()`發(fā)送數據
u8 TxBuf[17] = {0xEF,0x4A,0x0C,0x00,0xA1,0xD1,0x1B,0x08,0x08,0x25,0x11,0xEA,0x24,0x02,0x00,0x00,0x00};
void DatSent()
{
u8 DynSentCnt;
for(DynSentCnt=0; DynSentCnt<17; DynSentCnt++)
{
USART_SendData(USART3, TxBuf[DynSentCnt]);
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE)==0);
}
}
##### 1.2 從機
程序一致,只是主函數中去掉發(fā)送數據。
`stm32f10x_it.c`中斷程序
```c
void USART3_IRQHandler(void) // 中斷句柄
{
if(USART_GetITStatus(USART3, USART_IT_RXNE) != 0) // 判接收中斷標識
{
USART_ClearITPendingBit(USART3, USART_IT_RXNE); // 清楚中斷標識位
while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==0) // 判斷傳輸完成
{
USART_ClearFlag(USART3, USART_FLAG_TC); // 清楚傳輸完成中斷標識
GPIOB->ODR^=GPIO_Pin_0; // 翻轉PB0。讓LED燈發(fā)生改變
}
}
}
1.3 例程的難點和重點
在RCC_Configuration()中需要使能USART3和GPIO的復用引腳AFIO。
在NvicInit()中配置中斷類型是USART3。
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;在Usart3Init()中配置TX和RX引腳。其中TX引腳PB10配置為推挽模式(GPIO_Mode_AF_PP),RX引腳PB11配置為懸浮模式(GPIO_Mode_IN_FLOATING)。
在Usart3Init()中配置完成以后需要使能USART3,并且使能對應的中斷標識。
USART_Cmd(USART3, ENABLE); // usart3 enable
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); // 使能USART_IT_RXNE中斷標識
2、帶液晶屏的板子通訊并畫圖
說明:
液晶屏和板子之間使用USART2通信,采集板和顯示板之間使用USART3通信。
先上沒有接AD采集的效果

main.c
#include "system.h"
extern double InitVoltage; // 初始電壓IVO
extern double InitCurrent; // 初始電流IIO
extern double InitBiasVoltage; // 初始偏置電壓IVB
extern double InitBiasCurrent; // 初始偏置電流IIB
extern double InitTransTemp; // 初始變壓器溫度ITT
extern double InitRadiatorTemp; // 初始散熱器溫度ITR
extern double InitAmbientTemp; // 初始環(huán)境溫度ITA
extern double SateOfCharge; // 荷電狀態(tài)SOC
extern double SateOfPower; // 電池功率狀態(tài)SOP
extern double SateOfTemp; // SOT
extern double QualFact; // 質量因素QF
/******************************************************************************/
void main()
{
__disable_interrupt(); // diaable interrupt
SystemInit(); // System reset & clock configuration
RccInit(); // System initialization
/* Vector entry configuration */
#ifndef EMB_FLASH
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NVIC_Configuration(); // NVIC配置
Usart2Init(); // Usart2初始化
delay_ms(10);
SetBcolor(65535); // 界面背景色
GUI_CleanScreen(); // LCD清屏
window(); // LCD界面調用
initDataDisplay(); // 靜態(tài)顯示
Usart3Init(); // Usart3初始化
USART_Cmd(USART3, ENABLE);
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
__enable_interrupt();
dynamicDataDisplay(); // 動態(tài)數據顯示
while(1)
{
dynamicCurveDisplay(); // 動態(tài)曲線
}
}
在這個例程中,首先是基礎的配置
__disable_interrupt(); // diaable interrupt
SystemInit(); // System reset & clock configuration
RccInit(); // System initialization
/* Vector entry configuration */
#ifndef EMB_FLASH
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NVIC_Configuration(); // NVIC配置
Usart2Init(); // Usart2初始化
delay_ms(10);
針對液晶屏的操作使用的是提供的api。
主要是這幾個函數
SetBcolor(65535); // 界面背景色
GUI_CleanScreen(); // LCD清屏
window(); // LCD界面調用
...
initDataDisplay(); // 靜態(tài)顯示
...
dynamicDataDisplay(); // 動態(tài)數據顯示
...
dynamicCurveDisplay(); // 動態(tài)曲線</pre>
先設置背景色,然后清屏。window()函數主要是畫坐標系。靜態(tài)顯示是顯示右下角的數據。動態(tài)數據顯示的是正上方的動態(tài)數據和右下角的soc等。動態(tài)曲線主要是通過循環(huán)不停的打點來展示曲線,目前只畫了電壓和電流。并且用的都是靜態(tài)值。
/****************************************************************************
* 名 稱: SetBcolor()
* 功 能: 設置背景色
* 入口參數: bcolor 背景色RGB參數
* 出口參數: 無
****************************************************************************/
void SetBcolor(u16 bcolor)
{
SendBeginCMD();
SendChar(0x42);
SendChar((bcolor>>8)&0xff);
SendChar(bcolor&0xff);
SendEndCmd();
}
/****************************************************************************
* 名 稱: GUI_CleanScreen()
* 功 能: 清屏
* 入口參數: 無
* 出口參數: 無
****************************************************************************/
void GUI_CleanScreen()
{
SendBeginCMD();
SendChar(0x01);
SendEndCmd();
}
/*******************************************************************************
brief: Outline of window drawing.
param: None.
retval: None.
*******************************************************************************/
void window()
{
u16 i;
/*************************** 界面外框繪制 ************************/
SetFcolor(0);
GUI_Line( 20, 40, 20, 580); // 畫直線_左Y軸
GUI_Line( 20, 40, 780, 40); // 畫直線_上X軸
GUI_Line(780, 40, 780, 580); // 畫直線_右Y軸
GUI_Line( 20, 580, 780, 580); // 畫直線_下X軸
/*************************** 界面右下角框繪制 ************************/
SetFcolor(0);
GUI_Line( 550, 440, 550, 580); // 畫直線_左Y軸
GUI_Line( 550, 440, 780, 440); // 畫直線_上X軸
/********************* X軸刻度及坐標繪制 ************************/
DisText(764, 582, 0, 5, "分鐘"); // 右下角顯示"min"
for(i=20;i<=760;i+=70) // X底部大刻度線(間隔:70dot)顯示
{
GUI_Line(i,580,i,572); // 大刻度畫線
DisData(i-20,583,0,5,(i-20)/7); // 坐標值
}
for(i=20;i<=780;i+=7 ) // X底部小刻度線(間隔:7dot)顯示
{
GUI_Line(i,580,i,576); // 小刻度畫線
}
/********************* Y軸刻度及坐標繪制 ************************/
for(i=40;i<=580;i+=20) // Y大刻度線(間隔:40dot)
{
GUI_Line(20,i,28,i); // 大刻度畫線
if((580-i)/20)
DisData1(2,i-9,0,5,(580-i)/20);//坐標值
}
for(i=44;i<=580;i+=4 ) //小刻度線(間隔:4dot)
{
GUI_Line(20,i,24,i); // 小刻度畫線
}
}
/**
* 靜態(tài)數據初始化展示
*/
void initDataDisplay()
{
/** 初始值的定義 **/
InitVoltage = 45.66;
InitCurrent = 0.45;
InitBiasVoltage = 34.44;
InitBiasCurrent = 1.45;
InitTransTemp = 45.55;
InitRadiatorTemp = 34.66;
InitAmbientTemp = 23.98;
/** 初始函數實現 **/
InitVoltDis(InitVoltage);
InitCurrDis(InitCurrent);
InitBiasVoltDis(InitBiasVoltage);
InitBiasCurrDis(InitBiasCurrent);
InitTransTempDis(InitTransTemp);
InitRadiatorTempDis(InitRadiatorTemp);
InitAmbientTempDis(InitAmbientTemp);
}
/**
* 動態(tài)曲線
*/
void dynamicCurveDisplay()
{
X_PotCnt++; // X打點計數器+1
x_coordinate=X_OFFSET+((X_PotCnt)/INTERVAL); // 當前X坐標值計算
/*********************** 電壓曲線顯示 ************************/
SetFcolor(63488); // 曲線顏色:紅
y_volt=Y_HIGH-(u16)(Y_VALIDHIGH*(Voltage/VOLTRANGE)); // 電壓量程范圍:0~72.500,滿度對應10格大刻度
if(x_coordinate < 780)
{
GUI_Dot(x_coordinate, y_volt); // GUI打點函數:電壓曲線繪制
/*********************** 電流曲線顯示 ************************/
SetFcolor(31); // 曲線顏色:蘭
y_curr=Y_HIGH-(u16)(Y_VALIDHIGH*(Current/CURRRANGE)); // 電流量程范圍:10A,滿度對應10格大刻度
GUI_Dot(x_coordinate, y_curr); // GUI打點函數:電壓曲線繪制
}
}
InitVoltDis(double vid)
/**
* 初始輸出電壓展示IVO
*/
void InitVoltDis(double ivd)
{
SetFcolor(18572); // 顯示標題顏色:黑
DisText(565,450,1,5, "IVO:"); // 顯示標題
SetFcolor(63488); // 紅
sprintf(data,"%2.2f", ivd); // 時間字符顯示:min
DisText(600,450,1,5,data);
SetFcolor(31); // 紅
DisText(645, 450, 1, 5, "mV ");
}