完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32最简单的外设莫过于IO口的高低电平控制了, Proteus仿真STM32F103R6的跑马灯程序。
一、原理图 二、跑马灯C程序 // 粗略延时函数 static void delay(unsigned int n) { for(unsigned int i=0; i for(unsigned int j=0; j<1024; j++) { for(unsigned int k=0; k<1024; k++) { __asm("nop"); } } } } int main(void) { // 使能GPIOB端口时钟 // RCC起始地址:0X40021000 // RCC_APB2ENR偏移地址:0X18 *(unsigned int *)(0X40021000 + 0X18) |= (1 << 3); // 配置IO口为输出模式 // CNFy[1:0]: 00 - 通用推挽输出模式 // MODEy[1:0]:01 - 输出模式,最大速度10MHz for(unsigned int i=0; i<8; i++) { // GPIOB起始地址:0X40010C00 // GPIOx_CRL偏移地址:0X00 *(unsigned int *)(0X40010C00 + 0X00) |= (1 << (4*i+0)); *(unsigned int *)(0X40010C00 + 0X00) &= ~(1 << (4*i+1)); *(unsigned int *)(0X40010C00 + 0X00) &= ~(1 << (4*i+2)); *(unsigned int *)(0X40010C00 + 0X00) &= ~(1 << (4*i+3)); } // 设置IO口为高电平,关闭LED灯 // GPIOB起始地址:0X40010C00 // GPIOx_ODR地址偏移:0X0C *(unsigned int *)(0X40010C00 + 0X0C) |= 0xFF; while(1) { for(unsigned int i=0; i<8; i++) { // 设置IO口为低电平,打开LED灯 // GPIOB起始地址:0X40010C00 // GPIOx_ODR地址偏移:0X0C *(unsigned int *)(0X40010C00 + 0X0C) &= ~(1 << i); delay(1); // 设置IO口为高电平,关闭LED灯 // GPIOB起始地址:0X40010C00 // GPIOx_ODR地址偏移:0X0C *(unsigned int *)(0X40010C00 + 0X0C) |= (1 << i); delay(1); } } } |
|
|
|
只有小组成员才能发言,加入小组>>
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
427 浏览 1 评论
279 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
247 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
611 浏览 2 评论
635 浏览 2 评论
1364浏览 9评论
37浏览 3评论
STM32CUBEMX4.22.1在main函数里面添加一行语句就死机的原因?
49浏览 3评论
42浏览 3评论
KEIL MDK为什么无法debug library中的代码?
80浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-28 00:39 , Processed in 0.696651 second(s), Total 74, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号