STM32F103C8T6编写简单的程序并烧录到板卡上_stm32f103c8t6写程序

HAL\_GPIO\_WritePin(GPIOA, GPIO\_PIN\_4, 0);

2.将GPIO设置为输入模式并读取输入电平

(1) 在Pinout & Configuration配置中,左键单击要设置为输入模式的引脚,并选择GPIO_Input模式。

GPIO_Input模式

(2)在main.c函数中,可以通过HAL_GPIO_ReadPin()函数读取引脚的输入电平,假设设置的输入引脚为PA5。

则读取PA4的输入电平时,可以用以下代码:

HAL\_GPIO\_ReadPin(GPIOA, GPIO\_PIN\_5)

HAL_GPIO_ReadPin()函数的参数中,第一个参数GPIOA代表选择的引脚为PA引脚,第二个参数GPIO_PIN_5代表选择的引脚序号为5。

3.延时函数

延时函数常用于按键消抖,或用于LED灯闪烁,可以通过HAL_Delay()函数来实现延时,假设需要延时500ms,可以输入以下代码:

HAL\_Delay(500)

注意这里HAL_Delay()函数是以ms为单位。

4.PWM的产生

在Pinout & Configuration配置中,将要输出PWM波的引脚设置成TIMX_CHX模式,如这里我们设置PA8为输出PWM波的引脚:

PWM模式

从图中的TIM1_CH1中可以看出PA8对应的通道是TIMER1中的CHANNEL1,因此后续我们将对这一个通道进行配置。

选中Timers -> TIM1,将其中的Clock Souce改为Internal Clock,将Channel1改为PWM Generation CH1。

TIMER1设置

在Clock Configuration一栏中更改内部时钟源的频率,比如我们这里设置为8MHz。

时钟设置

在之前的Pinout & Configuration -> Timers -> TIM1一栏的Parameter Settings中更改PWM的参数。比如这里设置时钟周期为8MHz的128分频,计数模式为增计数,一个PWM周期为64300,上升沿占的周期为31250:

PWM参数设置

上述配置完成后,即可在main.c中写如下代码来产生PWM波:

HAL\_TIM\_PWM\_Start(&htim1, TIM\_CHANNEL\_1);

其中HAL_TIM_PWM_Start()函数用于启动PWM波的产生,第一个参数&htim1表示所用的时钟源为TIMER1,第二个参数TIM_CHANNEL_1表示用的通道是Channel1,这也正对应了我们选择的PA8引脚所对应的通道。

二、如何向板子下载程序

1.引脚配置

在Pinout & Configuration配置中,选中System Core -> SYS,在Debug一栏中选择Serial Wire。

下载串口选择

2.下载选项设置

首先准备好J-LINK下载器。在STM32CubeIDE的工具栏中选择Debug下拉列表中的Debug Configurations…选项,将调试探头选择为J-LINK,接口类型选择SWD。

下载方式选择

3.连接下载器

用杜邦线连接STM32和J-LINK,注意以下对应关系:

STM32F103C8T6J-LINK
3V33V3
GGND
SWDIOSWDIO
SWCLKSWCLK

STM32与J-LINK的连接方式

连接好后用usb连接J-LINK和PC。

4.BOOT配置

在每个STM32的芯片上都有两个BOOT0和BOOT1两个管脚,这两个管脚的电平状态决定了芯片复位后从哪个区域开始执行程序,具体对应关系如下:

BOOT状态工作模式
BOOT0 = 0 BOOT1 = x从用户的闪存模式启动,正常工作模式
BOOT0 = 1 BOOT1 = 0从系统存储器启动,厂家设置的工作模式
BOOT0 = 1 BOOT1 = 1从内置SRAM启动,这种模式可用于调试

在首次用STM32下载自己的程序时,需要按照下述步骤配置BOOT:

  • (1) 将BOOT0置1,BOOT1置0,按下RESET键。
  • (2) BOOT0置0,BOOT1置0,下载程序。

之后下载程序就只需要执行步骤(2),不需要执行步骤(1)了。

5.开始下载

上述配置全部完成后,点击工具栏中的Debug按钮,即可开始下载程序。

三、实战演习-按键控制LED灯的亮灭

在笔者的板卡上,LED是PA4引脚,按键是PA5引脚,因此先要配置PA4为输出模式,PA5为输入模式。注意这里一定要对应你自己板子的LED和按键引脚,如不清楚可以去查看相关的芯片手册。

LED和按键的GPIO设置

在main.c函数中找到while(1)所在的代码段,将其间的代码改成如下形式,即可通过按键控制LED灯的亮灭:

按键控制LED代码

/\* USER CODE BEGIN WHILE \*/
int state = 0;
HAL\_GPIO\_WritePin(GPIOA, GPIO\_PIN\_4, 0);

while (1)
{
  if(HAL\_GPIO\_ReadPin(GPIOA, GPIO\_PIN\_5) == 0)
  {
    HAL\_Delay(10);// 消抖
	if(HAL\_GPIO\_ReadPin(GPIOA, GPIO\_PIN\_5) == 0)
	{
	  state = (state + 1) % 2;
	  HAL\_GPIO\_WritePin(GPIOA, GPIO\_PIN\_4, state);
	}
  }
  /\* USER CODE END WHILE \*/
}

随后按照之前所述的下载程序的方法,将程序下载到板子上,即可通过点击按键来控制LED的亮灭了。

当然,通过本篇的学习,相信聪明的你也可以实现LED闪烁和通过PWM控制呼吸灯的程序,并且笔者极力建议你去尝试,这样才能加深对STM32编程的掌握。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值