
终于开始系统学习STM32了,以前偶尔看一眼,总是不能坚持,总是这样那样的借口,向后推迟,但始终在俺强大的内心深沟里,想学它。 废话少说,这就开干了,用的MDK做开发环境。7 Z; |; U' K( n! L( ?/ S/ z 先学简单的IO口的操作,这可是入门的很重要的一步,不学好打击积极性。% e5 k3 `/ }2 f) Y6 J3 T3 W& \ GPIO->ODR 这是我第一次见到这样的书写方式,决定百度一下。 GPIO->ODR是32位的输出数据寄存器(高16位保留,低16为依次对应某个GPIO口的16个引脚)。对ODR赋值是一次操作16位的,也就是同时设置了16个引脚的输出电平;而GPIO_PIN是指某个端口的具体某一个引脚,是位操作,可以通过设置BSRR或BRR寄存器来设置某一特定引脚的输出电平,而保持其他引脚输出不变,速度快,效率高。具体可以看看stm32参考手册关于GPIO寄存器的说明#include <stm32f10x_lib.h> // STM32F10x Library Definitions #include "STM32_Init.h" // STM32 Initialization( E9 r9 D$ A" F G# t 3 @) E& y$ S6 f& t; |/ t# x; |; X% ] #define LED ( 1 << 5 ) // PB5: LED D2 m: q, z& V: Y void Delay(vu32 nCount) { for(; nCount != 0; nCount--);7 k( |" c4 T$ g$ M7 B' |$ ? }# H3 S5 h& Z3 f8 u `! Z; _ i! Y* X; R- h- z: y8 c ! V3 s$ k% b7 b% w, t int main (void) {/ G9 q0 y0 n! D0 J stm32_Init (); // STM32 setup for(;;) { //GPIOB->ODR &= ~LED; //我将/GPIOB->ODR &= ~LED;换成了GPIOB->BRR = GPIO_Pin_5;显示效果不变 F1 s) O7 r3 g9 ^ GPIOB->BRR = GPIO_Pin_5; // switch on LED Delay(2000000);7 |. N5 |; i' v1 }3 A" X //GPIOB->ODR |= LED; // switch off LED GPIOB->BSRR = GPIO_Pin_5; Delay(2000000); }3 i, P' J0 X- ^% M0 e } D7 p$ ?2 K# e( s |
希望大神带我飞,, |
谢谢楼主分享 我也会点灯了 |
谢谢分享。学习了啊
![]() |
我只是初学者,, |
![]() |
good job ![]() |
LZ代码整理下,好乱 |
星星点灯了 |
![]() |
就爱这么简洁的风格 |