Ⅰ 利用stm32的单片机完成下面的要求,程序该怎么写,用C语言
用两个定时器分别对两个LED灯闪烁,KEY1和KEY2要设置为外部中断输入,当进入中断时KEY1_DANG或KEY2_DANG指向下一个档位,并且发送串口。给你提供点思路。
void main()
{
while(1)
{
if(key1_dang==0x01)
中断定时1设置为0.2秒
if(key1_dang==0x02)
中断定时1设置为0.4秒
if(key1_dang==0x03)
中断定时1设置为0.6秒
if(key1_dang==0x04)
中断定时1设置为0.8秒
if(key1_dang==0x05)
中断定时1设置为1.0秒
if(key2_dang==0x01)
中断定时2设置为0.2秒
if(key2_dang==0x02)
中断定时2设置为0.4秒
if(key2_dang==0x03)
中断定时2设置为0.6秒
if(key2_dang==0x04)
中断定时2设置为0.8秒
if(key2_dang==0x05)
中断定时2设置为1.0秒
}
}
Ⅱ 有谁知道:stm32是用C编程好,还是C++编程好如果用C++编程速度会不会变慢
人有多大力就办多大事”,STM32的功能远比51、AVR之类的单片机要强大得多,相对来说开发的产品功能比较大,代码也会比较复杂。
首先有完整的框架是非常必须的,我个人认为这里的框架有两层,一个是在STM32上移植现有的操作系统或者一些稳定的代码框架,另外一个是自己的编程风格。
你想很方便的开发相对复杂的东西,建议你首先在STM32上移植一个小型操作系统或一种框架,然后在操作系统之上编写你自己的应用去开发产品。在没有操作系统或框架的情况下开发是非常麻烦的事情。要做到条理清晰的话,那就应该去迎合操作系统或框架的风格去编写代码,这答案并不唯一。 举个简单例子,现在比较热门的STM32F103或STM32F407开发产品,一般会移植一个ucosii或rt-thread操作系统(当然也有移植linux或android的,但我个人很少见),ucosii我没实际开发过我就不说了,像rt-thread这样的实时操作系统,它具有多任务编程,那么我们就需要迎合它的特点,比如我串口作为一个线程,LCD、LED扫描作为一个线程,数据采集作为一个线程,键盘扫描作为一个线程等等,在他们的线程中只各自做自己的事情,然后在增加一个顶层的线程专门来负责处理其他线程所产生的消息事件(或者给其他各线程发送消息事件),顶层的线程是作为一个中心处理线程来合理安排和处理其他各个线程的消息事件。
至于在这方面的提升,只能是通过实践来达到效果,这里的“实践”不是说要完全自己去摸索,你需要有东西来借鉴,因为现在一些操作系统、或框架、或编程风格都是比较成熟,你直接拿来看,看看别人是怎么写的代码,然后自己再去仿照着能不能写的出来,再分析里面的优缺点。你要是还在学校且资源有限,建议你可以花个几百块钱上淘宝买一个开发板,一般的开发板都有各个外设的实验,以及综合实验,或许还会有操作系统或框架的移植和使用
Ⅲ stm32单片机c语言详解
Stm 32单片机C语言解释详解,这个是通过语言的翻译来进行解释
Ⅳ stm32单片机c语言#define问题。
首先寄存器不需要作为参数传的,在程序任何地方都可以使用。
如果对于输入Cxkg1,Cxkg2...觉得麻烦可以有两种方法:
1. #define Cxkg(x) PDin(x)
在使用时直接if (CFDP == Cxdg(1)),if (CFDP == Cxdg(2))...
2. 函数使用形参,比如:
char Runto1(int Cxkg_val)
{
函数中判断也用Cxkg_val
}
函数调用时分别用Runto1(Cxkg1),Runto1(Cxkg2)等
Ⅳ stm32用什么语言编程
stm32单片机用的是C语言编程,mdk472是安装工具,KEIL_lic是破解软件。要看看电路图,都留出了哪些IO和哪些功能比如AD或者串口,都接了什么。假如是开发板的话可以看开发板的资料。
Ⅵ 我没学过单片机,有c语言基础,能直接学习stm32吗
大概是不行的。虽然stm32要求的c语言你学过,但是很多东西要是直接去学习stm32的话很难理解。并且目前stm32的学习资料不是特别多(相比于51单片机),基础的更没有了,几乎所有资料都是建立在对单片机有一定认识上的。虽然stm32的确很高级,但是必须很复杂,比较难懂,不然大家都去学习了。比如寄存器,中断等很多概念在stm32的资料中很少有详细地去讲,都是直接教你怎么用,可是你根本不懂那是什么,所以这些都得从简单的单片机中入手去学习基本的东西,目前最常用的基本单片机是51单片机,资料超全,也很详细,等你学的差不多时在去学习stm32吧,不然你会很痛苦的
Ⅶ stm32 C语言特殊性
这是标准的C语言啊,不是STM32的特殊用法,你那个写的是对的,相当于:
((int *) 0x00000000) = 1;
这么个意思;
那么为什么要用结构体呢?
不是C语言的特殊用法,是因为STM32这种单片机的外设架构,STM32把所有同类型的外设集中到了一块,这样库就好写多了。
太详细我也说不明白,给你举个例子吧:
比如说,我是说比如啊,GPIOA的CRL寄存器地址是0,CRH寄存器地址是4,IDR寄存器地址是8,ODR寄存器地址是12,那么,按照你刚才的写法是
#define GPIOA_CRL *((unsigned long*)(0x00000000))
#define GPIOA_CRH *((unsigned long*)(0x00000004))
#define GPIOA_IDR *((unsigned long*)(0x00000008))
#define GPIOA_ODR *((unsigned long*)(0x0000000C))
如果用结构体,就方便多了
typedef struct
{
vu32 CRL;
vu32 CRH;
vu32 IDR;
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
} GPIO_TypeDef;
GPIO_TypeDef *GPIOA = (GPIO_TypeDef *)(0x00000000);
这样一写,那么,就注定了GPIOA->CRL 的地址肯定是0;
GPIOA->CRH的地址肯定是4;
GPIOA->IDR的地址肯定是8;
比你那样写省事了不少吧?
Ⅷ 学习STM32一定要用到汇编语言吗我只会C语言怎么办
学stm32汇编不是必须会用的,但是如果懂汇编,会使你写的c程序有更好的执行效率。
Ⅸ 使用stm32单片机做毕设 c语言编程 老师问我寻址方式是什么 怎么回答
用C语言编程不关心什么寻址方式,在汇编语言中有体现,寻址方式是指寻找操作数的方法。汇编指令一般格式是
操作码,操作数1 操作数2
一般操作码和操作数1是固定搭配的,寻找第二个操作数的方法就是寻址方式。
例如 ADD A,#12H
操作码和操作数1共同组成一个8位的机器码,而操作数2的来源有很多
上例中操作数2是立即数,这种寻址方式就叫立即寻址,
ADD A,30H
30H 是直接地址,这种寻址方式就是直接寻址
此外还有寄存器寻址,寄存器间接寻址等多种方式。