【百问网智能家居】外设开发
该博客是本人在学习百问网视频过程中的记录与心得,所以内容可能有些许错误,欢迎大家指正。
一、基础外设开发
对于STM32F103C8T6芯片,它含有四个时钟源,分别是HSE(高速外部时钟),HSI(高速内部时钟),LSI(低俗内部时钟),LSE(低速外部时钟)。一般来说,我们采用精度更高的HSE来作为系统时钟,对于C8T6芯片,我们使用8MHZ的晶振作为HSE,通过倍频器实现9倍频来作为系统时钟(72MHZ)。
此外,对于GPIO来说,存在8种工作模式:
输入模式有四种:上拉输入、下拉输入、浮空输入、模拟输入;
输出模式有四种:推挽输出、开漏输出、复用推挽输出、复用开漏输出;
其中比较重要的推挽输出和开漏输出有这些区别,推挽输出可以输出高电平和低电平,而开漏输出只能输出低电平,只有在外加了上拉电阻之后才可以输出高电平,开漏输出的应用场景典型的就有IIC。对于一般场景,都是采用推挽输出的方式,同时,推挽输出同样可以用来检测IO口的输入状态。对于输入模式,进行AD数据采集的时候需要采用模拟输入方式,对于默认状态的STM32单片机,IO为浮空出入模式。
二、串口相关
串口可以进行串口设备的互通信,一般可以在项目初期进行串口打印来调试信息。对于ARM架构,有半主机模式的概念,通过重定向fputc/fgetc来实现printf等函数串口打印的效果。在非RTOS的情况下,使用Microlib库就可以不用定义_stdout /_stdin。具体代码如下:
struct __FILE
{
int handle;
};
/* FILE is typedef’d in stdio.h. */
FILE __stdout;
int fputc(int ch, FILE f)
{
/ Your implementation of fputc(). /
HAL_UART_Transmit(&huart1, (uint8_t)&ch, 1, 10);
return ch;
}