
点亮PA5引脚的LED。 软件用IAR 7.2 /* stm32f072 nucleo test program6 [ O8 p7 Y: R# Z- o; ] m0 最小系统测试程序 不需要头文件和库函数,很小巧实用! 用于I/o口翻转频率测试、跑马灯演示! 作者: 大秦正声,小电子 日期: 2014.12.211 z1 i, [0 {% Q% E" n$ h8 C 博客: http://yang96381.blog.163.com; M+ \# V+ e/ I* y# B0 ?0 @! R$ l" | 邮箱: yang96381@163.com' z- g1 W E% K2 e */' i! u/ J; F% T 6 J' a a& c% C, w! N 0 B. l1 Z9 G+ O. b+ I8 | #define DELAY_COUNT 0xfFFFF unsigned long dat; void Delay( long int Count) { for(; Count!= 0;Count--); }1 ^% a3 R; M) {( L2 U! V. x. w int main(void)0 {/ p1 G- E, T1 G: G7 l { *(long*)0x40021014=0x007e0014;//A i/0口使能 *(long*)0x48000000=0x28555555;//输出/ I: g( z2 C2 c: c6 @3 P *(long*)0x48000008=0x0cffffff;//high speed *(long*)0x4800000c=0x24555555;//上拉4 J$ t3 s( W& `. b! t 8 L. a5 R, Z, {. Y9 W7 S while(1) {*(long*)0x48000014=0xffff;//高 Delay(DELAY_COUNT);///延时,翻转测试不用 *(long*)0x48000014=0x0;//低 Delay(DELAY_COUNT);///延时,翻转测试不用, [" X a2 p2 `, c( _# ] } } |
2 C3 ^: k+ N2 k) N- F: F8 Q' [' o
新版本
/*$ @4 R( o5 ?& P. s8 k- e
stm32f072 nucleo test program1 ~# p$ R( `" l2 {" O; ]
m0 最小系统测试程序3 _9 I0 J3 T i6 t" A
不需要头文件和库函数,很小巧实用!
用于I/o口翻转频率测试、跑马灯演示!
作者: 大秦正声,小电子
日期: 2015.1.68 P1 B( T. ]1 t& d" @. R
博客: http://yang96381.blog.163.com5 M l; y. y' \" u' \+ H
邮箱: yang96381@163.com3 Y- E& G5 N6 u/ q4 `' W
*/ i8 d5 \3 }4 n# R2 U4 s' _
$ z, _9 {: h) I$ o
; V$ w2 }% p! W' P0 P& j( q& H
#define DELAY_COUNT 0xFFFFF! A6 u2 V5 z. e- U" C
#define PA_OUT *(long*)0x480000149 @7 w! V8 h7 Z- ^/ d& A$ R
#define PA_SPEED *(long*)0x480000085 X% A0 v/ y6 ]& o, f1 N5 g
#define RCC_AHBENR *(long*)0x40021014$ X( p7 _9 F8 U1 o, O
#define PA_MODER *(long*)0x48000000
void Delay( long int Count)
{- P' O. K2 q& r
for(; Count!= 0;Count--);
}
int main(void)6 d- G: G4 D! X
{
RCC_AHBENR=0x007e0014;//A i/0口使能
PA_MODER =0x28555555;//输出) l B. f; g3 |6 j4 `6 X
PA_SPEED=0x0cffffff;//high speed7 y8 D" G" `6 a$ g7 R5 C
& K# R$ e: h6 M* K6 A% z' o
while(1)$ {9 r" V3 L7 S; w
{PA_OUT=0xffff;//高4 D9 |6 M$ Y0 g; |! U
Delay(DELAY_COUNT);///延时,翻转测试不用5 j3 s2 a, a0 n/ D+ j2 p2 J4 w6 o# S
PA_OUT=0x0000;//低
Delay(DELAY_COUNT);///延时,翻转测试不用
}& l W$ Z# O, V `
}
像你说的这样,GPIOA->ODR,DDR,。。。是不是都需要使用宏声明一下?
而在官方的头文件中,只需要使用结构体的自动偏移就行了。
这样在传递参数的时候更方便。就像WriteBits,只需要传递一个GPIOA就行了,其余的比如ODR都可以知道,而像你这种方式,ODR,IDR等等寄存器的地址都需要手动计算
将地址转换成指针访问:, D! v/ N: D. U* l( \, k
比如:将内存是0XA000_0000处的值写成100:
*((volatile uint32_t *)0XA000_0000)=100;
千万不要在windows上面实验这样的代码,因为他们有内存保护。
谢谢!程序的可读性有待提高!好处是输出速度提高了!
如果直接访问寄存器,使用GPIOX->ODR和这个的输出速度应该没有区别。4 c$ d: B; x* v$ Y5 y7 P
说是速度提高了,应该是直接访问寄存器和库函数相比,速度应该提高
说的对!
已经修改了!
这个程序和之前的没有什么区别。是使用GPIOA->ODR,这样就不需要知道ODR的地址了
可读性提高了啊
。。。万一哪天你忘记了ODR的地址怎么办/ c' O$ e& s; \1 A; P2 \, C
或者你把ODR的地址写错了怎么办?
已经把地址改成PA_OUT等
就是不标准
谢了啊