carry
发布于 2024-05-01 / 20 阅读
0
0

使用stm32f103c8t6完成《嵌入式技术与基础 第六版》相关内容博客作业1-2 跑起来

使用stm32f103c8t6完成《嵌入式技术与基础 第六版》相关内容博客作业1-2 跑起来

零、 创新点

《嵌入式技术与基础 第六版》原书教材随书附赠了一块stm32L431的开发板,配套内容都是以此为基础打造的,甚至作者还专门为此开发了一套ide,但是:

  • 现在stm32主流的教程生态用的都是stm32f103c8t6这款芯片,原书的教程虽然能很好的为你解释嵌入式开发的原理,但是要进一步学习,你还是不得不寻找其他教程,购买主流的开发板
  • 作者的ide完全是出于本书学习设计的,对于实际开发毫无意义,若将来想做点嵌入式,还需要重新学习一套开发栈
  • 全新套书卖100。作为抠门带血生,肯定要考虑二手的,但是二手书通常不会带有原书的附件。单买开发板,某宝60,某鱼甚至没有。起码截至我使用该书学习的时间(2024年3月)是这样的,后期使用此书的前辈多了,估计二手市场会变好。
  • 最重要的是,我已经有一个stm32f103c8t6的开发板了

综上,无论是从学习角度还是省钱角度,使用stm32f103c8t6完成《嵌入式技术与基础 第六版》相关内容都是非常合适的

这套博客是广州大学计算机学院嵌入式系统课程的作业,我用stm32f103c8t6开荒,也是为了后来的同学做贡献

一、 目标

原作业是要求运行示例代码,实现了以下功能:

  1. 初始化外设模块,如GPIO、ADC和UART
  2. 读取MCU温度和外部热敏电阻温度,并将AD值转换为实际温度
  3. 判断温度变化,如果温度上升超过1℃,则闪烁黄灯
  4. 控制指示灯的状态,包括闪烁和颜色变化

由于我没有温控模块,所以我决定改为实现以下两个功能:

  1. 点亮小灯泡
  2. 实现串口输出

二、 安装环境

stm32 cube ide的前身是stm32 cube mx,虽然比不上最前沿的jetbrain和vscode,但是相比设计古早的keil v5与纯粹为学习打造的原书金葫芦ide,这款ide要好用得多。

我参考这个教程配置环境,在此不再赘述过程,我个人十分推荐这款教程,这是少有的内容形式不是ppt录屏上课,而是比较生动的知识类博主的模式

三、 可视化配置

stm32 cube ide有个好用的功能,可以可视化配置文档生成相关代码,我启用了1号串口,并将pa7作为小灯泡输出引脚

image

可以让配置的引脚默认输出高电平,这样我们甚至不用写一行代码

四、 重定向printf函数

原始代码使用printf函数实现输出,我决定复现这个

stdio.h函数中的printf函数依赖于fputc函数,要自定义printf,重定向fputc函数即可

/* USER CODE BEGIN 0 */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1,HAL_MAX_DELAY);
    return ch;
}
/* USER CODE END 0 */

通过宏定义,实现重定向

使用这个代码测试

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  printf("114514");
	  HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

注意:只有放在/ USER CODE BEGIN /和/ USER CODE END /之间的代码才不会在ide重新生成代码时被重写

五、 效果展示

小灯泡正常点亮,接线就不再赘述了

bf8aaf53ceb4ac8e6a168b983f32491

串口正常打印

image

关于作者:

欢迎联系!


评论