完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F103C8T6编写简单的程序并烧录到板卡上
本篇博客讲述了如何用STM32CubeIDE写一些基础的控制引脚的程序,包括GPIO的输出、GPIO的输入,以及用引脚输出PWM波。 同时讲述了如何通过J-LINK下载器将程序下载到STM32板卡上。并通过“实战演习-按键控制LED灯的亮灭”加深读者对这方面的掌握。 本篇博客中笔者使用的板卡是一个舵机转向小车(链接)中提供的STM32标准板卡。如果读者的板卡与之不同也没关系,只需要在“实战演习”中将引脚改换成自己板卡中LED和按键的引脚即可,其他过程完全一样。 一、基础引脚控制程序的编写 1.将GPIO设置为输出模式并设置输出电平 (1) 在Pinout & Configuration配置中,左键单击要设置为输出模式的引脚,并选择GPIO_Output模式。 (2) 在main.c函数中,可以通过HAL_GPIO_WritePin()函数设置引脚的输出电平,假设设置的输出引脚为PA4。 若要让PA4输出低电平,可以用以下代码: HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, 0); HAL_GPIO_WritePin()函数的参数中,第一个参数GPIOA代表选择的引脚为PA引脚,第二个参数GPIO_PIN_4代表选择的引脚序号为4,第三个参数0代表输出为低电平。 同理,若要让PA4输出高电平,可以用以下代码: HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, 0); 2.将GPIO设置为输入模式并读取输入电平 (1) 在Pinout & Configuration配置中,左键单击要设置为输入模式的引脚,并选择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波的引脚: 从图中的TIM1_CH1中可以看出PA8对应的通道是TIMER1中的CHANNEL1,因此后续我们将对这一个通道进行配置。 选中Timers -》 TIM1,将其中的Clock Souce改为Internal Clock,将Channel1改为PWM Generation CH1。 在Clock Configuration一栏中更改内部时钟源的频率,比如我们这里设置为8MHz。 在之前的Pinout & Configuration -》 Timers -》 TIM1一栏的Parameter Settings中更改PWM的参数。比如这里设置时钟周期为8MHz的128分频,计数模式为增计数,一个PWM周期为64300,上升沿占的周期为31250: 上述配置完成后,即可在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,注意以下对应关系: 连接好后用u***连接J-LINK和PC。 4.BOOT配置 在每个STM32的芯片上都有两个BOOT0和BOOT1两个管脚,这两个管脚的电平状态决定了芯片复位后从哪个区域开始执行程序,具体对应关系如下: [tr]BOOT状态工作模式[/tr]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和按键引脚,如不清楚可以去查看相关的芯片手册。 在main.c函数中找到while(1)所在的代码段,将其间的代码改成如下形式,即可通过按键控制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编程的掌握。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
652浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
521浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 06:23 , Processed in 0.876619 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号