使用stm32f103c8t6完成《嵌入式技术与基础 第六版》相关内容博客作业1-2 跑起来
零、 创新点
《嵌入式技术与基础 第六版》原书教材随书附赠了一块stm32L431的开发板,配套内容都是以此为基础打造的,甚至作者还专门为此开发了一套ide,但是:
- 现在stm32主流的教程生态用的都是stm32f103c8t6这款芯片,原书的教程虽然能很好的为你解释嵌入式开发的原理,但是要进一步学习,你还是不得不寻找其他教程,购买主流的开发板
- 作者的ide完全是出于本书学习设计的,对于实际开发毫无意义,若将来想做点嵌入式,还需要重新学习一套开发栈
- 全新套书卖100。作为抠门带血生,肯定要考虑二手的,但是二手书通常不会带有原书的附件。单买开发板,某宝60,某鱼甚至没有。起码截至我使用该书学习的时间(2024年3月)是这样的,后期使用此书的前辈多了,估计二手市场会变好。
- 最重要的是,我已经有一个stm32f103c8t6的开发板了
综上,无论是从学习角度还是省钱角度,使用stm32f103c8t6完成《嵌入式技术与基础 第六版》相关内容都是非常合适的
这套博客是广州大学计算机学院嵌入式系统课程的作业,我用stm32f103c8t6开荒,也是为了后来的同学做贡献
一、 目标
原作业是要求运行示例代码,实现了以下功能:
- 初始化外设模块,如GPIO、ADC和UART
- 读取MCU温度和外部热敏电阻温度,并将AD值转换为实际温度
- 判断温度变化,如果温度上升超过1℃,则闪烁黄灯
- 控制指示灯的状态,包括闪烁和颜色变化
由于我没有温控模块,所以我决定改为实现以下两个功能:
- 点亮小灯泡
- 实现串口输出
二、 安装环境
stm32 cube ide的前身是stm32 cube mx,虽然比不上最前沿的jetbrain和vscode,但是相比设计古早的keil v5与纯粹为学习打造的原书金葫芦ide,这款ide要好用得多。
我参考这个教程配置环境,在此不再赘述过程,我个人十分推荐这款教程,这是少有的内容形式不是ppt录屏上课,而是比较生动的知识类博主的模式
三、 可视化配置
stm32 cube ide有个好用的功能,可以可视化配置文档生成相关代码,我启用了1号串口,并将pa7作为小灯泡输出引脚
可以让配置的引脚默认输出高电平,这样我们甚至不用写一行代码
四、 重定向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重新生成代码时被重写
五、 效果展示
小灯泡正常点亮,接线就不再赘述了
串口正常打印
关于作者:
- 邮箱:luokairui@carry.fit
- 个人博客:carry blog
- CSDN主页:_:Carry-CSDN博客
- Github主页:C-a-r-r-y
欢迎联系!