打印
[STM32F1]

VSCODE STM32 裸机 控制数码管

[复制链接]
5857|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zero949079783 于 2021-10-26 19:49 编辑

编译环境:VSCODE(GCC编译链) +STM32CubeMx; 可以自行用STM32CubeMx生成 KIEL开发环境,代码是通用的。
代码:链接:https://pan.baidu.com/s/1uXfIR0GFQOBZPl1NfQP08w
提取码:6b0c







     // 只有直接操作ODR寄存器才能达到,只改变输出数据寄存器ODR的低8位
     // 其它位不变的目的。因为,只有低8位是数据引脚
#define SEG_DATE(DATE)  (GPIOA->ODR = ((GPIOA->ODR)&0xFF00)|(DATE))   //数码管段显输出8位数据
#define SEG_BIT(DATE)   (GPIOB->ODR = ((GPIOB->ODR)&0xFF00)|(DATE))   //数码管位显输出8位数据


const uint8_t SEG_Date_CA[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ;// 共阳极: 0,1,2,3,4,5,6,7,8,9
const uint8_t SEG_Date_CC[10] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F} ;  //共阴极: 0,1,2,3,4,5,6,7,8,9








ODR ,BSSR,BRR寄存器介绍:以下是复制网上的:
使用BRR和BSRR寄存器可以方便地快速地实现对端口某些特定位的操作,而不影响其它位的状态。
比如希望快速地对GPIOE的位7进行翻转,则可以:
GPIOE->BSRR = 0x80; // 置'1'
GPIOE->BRR = 0x80; // 置'0'
如果使用常规'读-改-写'的方法:
GPIOE->ODR = GPIOE->ODR | 0x80; // 置'1'
GPIOE->ODR = GPIOE->ODR & 0xFF7F; // 置'0'
有人问是否BSRR的高16位是多余的,请看下面这个例子:
假如你想在一个操作中对GPIOE的位7置'1',位6置'0',则使用BSRR非常方便:
  GPIOE->BSRR = 0x00400080;
如果没有BSRR的高16位,则要分2次操作,结果造成位7和位6的变化不同步!
  GPIOE->BSRR = 0x80;
  GPIOE->BRR = 0x40;
规则:
一、置GPIOD->BSRR低16位的某位为'1',则对应的I/O端口置'1';而置GPIOD->BSRR低16位
的某位为'0',则对应的I/O端口不变。
二、置GPIOD->BSRR高16位的某位为'1',则对应的I/O端口置'0';而置GPIOD->BSRR高16位
的某位为'0',则对应的I/O端口不变。
三、置GPIOD->BRR低16位的某位为'1',则对应的I/O端口置'0';而置GPIOD->BRR低16位的
某位为'0',则对应的I/O端口不变。
例如:
1)要设置D0、D5、D10、D11为高,而保持其它I/O口不变,只需一行语句:
  GPIOD->BSRR = 0x0C21;// 使用规则一
2)要设置D1、D3、D14、D15为低,而保持其它I/O口不变,只需一行语句:
  GPIOD->BRR = 0xC00A;// 使用规则三
3)要同时设置D0、D5、D10、D11为高,设置D1、D3、D14、D15为低,而保持其它I/O口不变
,也只需一行语句:
  GPIOD->BSRR = 0xC00A0C21;// 使用规则一和规则二
如果中断中要对IO口设置,最好使用BSRR和BRR操作,而不要用ODR .
ODR :可读可写并只能以字(16位)的形式操作
BSSR:只能写入并只能以字(16位)的形式操作,如果同时设置了高16bit和低16bit,则低16bit起作用。
BRR:只能写入并只能以字(16位)的形式操作



使用特权

评论回复
沙发
自己造声卡| | 2021-9-26 17:56 | 只看该作者
这个和使用库文件编程有什么区别呢?

使用特权

评论回复
板凳
tail066| | 2021-9-26 20:02 | 只看该作者
可以,可以
感觉很少见数码管了

使用特权

评论回复
地板
zero949079783|  楼主 | 2021-9-26 23:01 | 只看该作者
tail066 发表于 2021-9-26 20:02
可以,可以
感觉很少见数码管了

现在都是用32位的MCU,用32位去点数码管就是用牛刀杀蚂蚁

使用特权

评论回复
5
zero949079783|  楼主 | 2021-9-26 23:14 | 只看该作者
自己造声卡 发表于 2021-9-26 17:56
这个和使用库文件编程有什么区别呢?

没什么区别。用STM32 CubeMx就是初始化外设方便,跳过了寄存器,其他都是一样的。
编译器可以用MDK,IAR,GCC等,自己喜欢就可以了

使用特权

评论回复
6
kyzhd| | 2021-9-27 15:26 | 只看该作者
现在IDE的选择非常多,只要是自己顺手的就好。感谢楼主的推荐。

使用特权

评论回复
7
wowu| | 2021-10-11 10:59 | 只看该作者
都添加 了什么外设啊

使用特权

评论回复
8
paotangsan| | 2021-10-11 11:00 | 只看该作者
可以用iar吗

使用特权

评论回复
9
renzheshengui| | 2021-10-11 11:02 | 只看该作者
确实非常的方便

使用特权

评论回复
10
wakayi| | 2021-10-11 11:02 | 只看该作者
这个是工程的连接吗

使用特权

评论回复
11
xiaoqizi| | 2021-10-11 11:06 | 只看该作者
不太喜欢直接操作寄存器

使用特权

评论回复
12
zero949079783|  楼主 | 2021-10-11 16:18 | 只看该作者

KEIL和IAR要收费的

使用特权

评论回复
13
zero949079783|  楼主 | 2021-10-28 19:19 | 只看该作者
自己造声卡 发表于 2021-9-26 17:56
这个和使用库文件编程有什么区别呢?

没什么区别

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

89

帖子

1

粉丝