一、STM32CubeMx实现数码管
1、双击打开STM32CubeMX。
2、点击File选项,在File列表下选择New Project选项新建工程。
3、在图中所示位置的方框中输入我们使用的芯片型号来搜索芯片
4、与我们的搜索相关的芯片型号会在这里呈现,我们只需要选择我们需要的即可,这里我们双击第一个STM32F103C8T6即可完成芯片选型。
5、完成芯片选型之后我们会来到这个界面:
6、下一步我们先来配置程序下载方式:选中System Core清单下的SYS选项。在右侧弹出的窗口中有Debug选项,单击Debug选项右侧的小箭头,在下拉列表中选择Serial Wire选项。这一步是配置使用ST-LINK下载程序。
7、下一步是开启外部时钟。单击左侧列表中的RCC选项,右侧窗口会出现默认为Disable的HSE和LSE两个选项,即外部高速时钟和外部低速时钟。这里我们都选择第三项Crystal/Ceramic Resonator,意思是使用板载的外部晶振作为时钟源。
8、由于我们需要使用1位数码管来显示,所以需要给数码管配置GPIO。在这里我们给数码管的8个引脚全部配置为输出模式。单击需要配置的引脚,在弹出的列表中选择GPIO_Output。配置成功后引脚会变成绿色。
9.接下来我们需要配置时钟。点击上方的Clock Configuration选项,来到时钟树的界面。
10、时钟配置完成后点击上方的Project Manager选项,对工程进行设置。
配置完这个页面后我们选择左侧的Code Generator选项
11、工程已配置完成,单击右上角的GENERATE CODE选项生成代码。
然后会弹出如下界面
我们选择中间的选项直接打开工程
如图所示:左边是已经生成好的相关文件,我们只需要在其中添加我们的代码
12、代码如下:仅供参考,请根据实际情况自行更改。
void SMG(int x){
//数码管显示0
if(x == 0)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,GPIO_PIN_RESET);
if(x == 0)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
//数码管显示1
if(x == 1)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_RESET);
if(x == 1)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_SET);
//数码管显示2
if(x == 2)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7,GPIO_PIN_RESET);
if(x == 2)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3|GPIO_PIN_6,GPIO_PIN_SET);
//数码管显示3
if(x == 3)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_7,GPIO_PIN_RESET);
if(x == 3)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5|GPIO_PIN_6,GPIO_PIN_SET);
//数码管显示4
if(x == 4)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
if(x == 4)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5,GPIO_PIN_SET);
//数码管显示5
if(x == 5)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
if(x == 5)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_SET);
//数码管显示6
if(x == 6)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
if(x == 6)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
//数码管显示7
if(x == 7)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_RESET);
if(x == 7)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_SET);
//数码管显示8
if(x == 8)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
//if(x == 8)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
//数码管显示9
if(x == 9)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
if(x == 9)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
}
while (1)
{
for(int y = 9; y >= 0; y--){
SMG(y); //数码管显示
HAL_Delay(1000); //HAL库的延时函数,延时1000ms
}
13.进行编译
编译成功
如果你在写注释的时候出现?或者乱码,设置一下编码格式