|
点亮PA5引脚的LED。( o) g$ D7 b$ \7 C9 c. h) K9 v 软件用IAR 7.25 l8 G; v3 D+ x- \( v+ g1 M+ o9 t /*2 }3 I; H m" c stm32f072 nucleo test program m0 最小系统测试程序* `% q5 u. D' k0 g2 z7 T- p I 不需要头文件和库函数,很小巧实用! 用于I/o口翻转频率测试、跑马灯演示! 作者: 大秦正声,小电子' V6 j- {& `, D3 D& n 日期: 2014.12.21 博客: http://yang96381.blog.163.com 邮箱: yang96381@163.com+ r( U# L: P' ]. w7 Z */ , i) T7 z |5 F2 q- H4 h #define DELAY_COUNT 0xfFFFF unsigned long dat; Q- X: H8 N7 _6 K void Delay( long int Count): M2 ]5 m- J: C3 t/ u! R { for(; Count!= 0;Count--);0 x2 o) E( I) R1 I6 l } int main(void) { : }9 j) O7 T6 u7 i *(long*)0x40021014=0x007e0014;//A i/0口使能 *(long*)0x48000000=0x28555555;//输出 *(long*)0x48000008=0x0cffffff;//high speed0 V0 m! f$ w( R" G *(long*)0x4800000c=0x24555555;//上拉& ?/ ?* k/ L* | ' b2 d3 j! I& _% O) h while(1)+ S! o2 W. y/ N# E. \! { {*(long*)0x48000014=0xffff;//高 Delay(DELAY_COUNT);///延时,翻转测试不用. D# J8 F3 V( [0 d) C* L- j$ M *(long*)0x48000014=0x0;//低 Delay(DELAY_COUNT);///延时,翻转测试不用 }. p; y7 h0 H5 N* E } |
微信公众号
手机版
/ d: I, c# r6 p3 x' O$ H! P
新版本
/*. M. p, Q; @ V8 X" K; l% i
stm32f072 nucleo test program
m0 最小系统测试程序: F. q6 a/ M9 U: ]! z
不需要头文件和库函数,很小巧实用! s' r P. y* @( Z) L# `
用于I/o口翻转频率测试、跑马灯演示!
作者: 大秦正声,小电子1 `3 T3 W* C' b: Z+ n
日期: 2015.1.6( i" \" y' \# U' Q: w6 ~1 P
博客: http://yang96381.blog.163.com* U9 M: s, l) g6 S% \, p- c, E
邮箱: yang96381@163.com* h: q, b6 c7 t9 t6 |+ X
*/
& b7 i1 L# }. ]7 v
& A- B: c3 f8 y; B3 |6 y
#define DELAY_COUNT 0xFFFFF" K2 z e' t" S$ U
#define PA_OUT *(long*)0x48000014# g) t$ K5 ?4 Y0 V/ Q1 M( d
#define PA_SPEED *(long*)0x48000008
#define RCC_AHBENR *(long*)0x40021014
#define PA_MODER *(long*)0x48000000
void Delay( long int Count)# W/ Q8 y4 ^2 K
{
for(; Count!= 0;Count--);
}: E) B$ w; v3 f4 `
int main(void)
{ " I+ r! B1 y' }0 m
RCC_AHBENR=0x007e0014;//A i/0口使能
PA_MODER =0x28555555;//输出9 F" \$ h6 t' E3 o! o
3 A* e# t V( K9 e+ w! l
PA_SPEED=0x0cffffff;//high speed: `8 w$ w' d s6 N
! S- E, q% @7 W* S$ S
4 r( A7 N6 V! D: c C; l
while(1)3 Y0 N6 T2 W! N7 y. v/ `! V
{PA_OUT=0xffff;//高
Delay(DELAY_COUNT);///延时,翻转测试不用
PA_OUT=0x0000;//低
Delay(DELAY_COUNT);///延时,翻转测试不用' m1 k" p7 x" c7 F5 C3 K1 K a2 K
}
}
像你说的这样,GPIOA->ODR,DDR,。。。是不是都需要使用宏声明一下?
而在官方的头文件中,只需要使用结构体的自动偏移就行了。
这样在传递参数的时候更方便。就像WriteBits,只需要传递一个GPIOA就行了,其余的比如ODR都可以知道,而像你这种方式,ODR,IDR等等寄存器的地址都需要手动计算
将地址转换成指针访问:
比如:将内存是0XA000_0000处的值写成100:
*((volatile uint32_t *)0XA000_0000)=100;
千万不要在windows上面实验这样的代码,因为他们有内存保护。
谢谢!程序的可读性有待提高!好处是输出速度提高了!
如果直接访问寄存器,使用GPIOX->ODR和这个的输出速度应该没有区别。
说是速度提高了,应该是直接访问寄存器和库函数相比,速度应该提高
说的对!
已经修改了!
这个程序和之前的没有什么区别。是使用GPIOA->ODR,这样就不需要知道ODR的地址了
可读性提高了啊
。。。万一哪天你忘记了ODR的地址怎么办
或者你把ODR的地址写错了怎么办?
已经把地址改成PA_OUT等! e: ~. H5 ]2 j; D8 O: |
就是不标准
谢了啊