STM 32 Keil C++モノリシックプログラム作成
C++は対象向けのプログラミング言語に属し、OOPの思想は言うまでもなく、特に複雑なソフトウェアエンジニアリングにとって、OOPを利用することは絶対に仕事の半分であり、伝統的なCに比べて.
もちろんCで単片機のプログラムを書くのは間違いなく、すでに伝統が続いており、大学時代から職場まで、多くの人がCでやっていますが、KeilがC++コンパイルをサポートしている以上、
C++であなたのコードを書くことができて、高級な言語を利用して構造化することができて、あなたのプログラムをはっきりさせて、どうして使いませんか!ははは、個人的な見方!次は本題に入ります.
C++はCに対応しているので、STM 32のライブラリはC++で使用できます.それなら簡単です.新しいSTM 32プロジェクトを構築する際、C++プログラミングを直接行うことができます.
C++を利用して、ファイルを作成して、私が書いたDemo:
全体の工事C++コードは上述のように、直接コンパイルすればよい.もちろんmainが使えばc,接尾辞を修正することなくmainに直接でもよい.cの属性はC++sourcefileに変更すればよいが、割り込みファイルを使用すると、その割り込みファイルも同様にC++タイプに変更される.
このようにコンパイルした後、通常のC作成と同様に、ファイルを単片機にダウンロードすればよい.
差は少なくてこのようにしました!これから問題があったら、研究を続けます!
転載先:https://www.cnblogs.com/yeshuimaowei/p/6949642.html
もちろんCで単片機のプログラムを書くのは間違いなく、すでに伝統が続いており、大学時代から職場まで、多くの人がCでやっていますが、KeilがC++コンパイルをサポートしている以上、
C++であなたのコードを書くことができて、高級な言語を利用して構造化することができて、あなたのプログラムをはっきりさせて、どうして使いませんか!ははは、個人的な見方!次は本題に入ります.
C++はCに対応しているので、STM 32のライブラリはC++で使用できます.それなら簡単です.新しいSTM 32プロジェクトを構築する際、C++プログラミングを直接行うことができます.
C++を利用して、ファイルを作成して、私が書いたDemo:
.h --
#ifndef __PLED__
#define __PLED__
#include "stm32f10x.h"
class PLed
{
public:
PLed();
~PLed();
public:
void LED_GPIO_Config(void);
void TurnOn(uint16_t port,bool status);
private:
};
#endif
.cpp --
#include "PLed.h"
PLed::PLed(){LED_GPIO_Config();}
PLed::~PLed(){}
void PLed::LED_GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_6);
}
void PLed::TurnOn(uint16_t port,bool status)
{
if(status)
GPIO_SetBits(GPIOE,port);
else
GPIO_ResetBits(GPIOE,port);
}
main --
#include "stm32f10x.h"
#include "misc.h"
#include "stdio.h"
#include "PSysTick.h"
#include "PLed.h"
int main(void)
{
PSysTick pst;
pst.SysTick_Init();
PLed pled;
while (1)
{
pled.TurnOn(GPIO_Pin_5,true);
pled.TurnOn(GPIO_Pin_6,false);
pst.Delay(500);
pled.TurnOn(GPIO_Pin_5,false);
pled.TurnOn(GPIO_Pin_6,true);
pst.Delay(500);
}
}
Systick
#ifndef __PDELAY_H
#define __PDELAY_H
#include "stm32f10x.h"
class PSysTick
{
public:
PSysTick();
~PSysTick();
public:
void Delay(u32 nTime);
void SysTick_Init();
static u32 TimingDelayx;
};
#endif
#include "PsysTick.h"
PSysTick::PSysTick()
{}
PSysTick::~PSysTick()
{}
void PSysTick::Delay(u32 nTime)
{
TimingDelayx = nTime;
while(TimingDelayx != 0);
}
void PSysTick::SysTick_Init()
{
while(SysTick_Config( SystemCoreClock / 1000));
}
u32 PSysTick::TimingDelayx=0;
:
extern "C"
{
void SysTick_Handler(void)
{
if(PSysTick::TimingDelayx!=0x00)
{
PSysTick::TimingDelayx--;
}
else
PUsart::SendData('E');
}
}
全体の工事C++コードは上述のように、直接コンパイルすればよい.もちろんmainが使えばc,接尾辞を修正することなくmainに直接でもよい.cの属性はC++sourcefileに変更すればよいが、割り込みファイルを使用すると、その割り込みファイルも同様にC++タイプに変更される.
このようにコンパイルした後、通常のC作成と同様に、ファイルを単片機にダウンロードすればよい.
差は少なくてこのようにしました!これから問題があったら、研究を続けます!
転載先:https://www.cnblogs.com/yeshuimaowei/p/6949642.html