张叫兽的技术研究院
某信研究院高级研究员,涉猎领域包括:嵌入式操作系统,音视频,应用开发,大数据,人工智能等。信奉源码出真知,喜欢通过分析源码挖掘背后的知识体系。
有朋从远方来,不亦说乎。
展开
-
STM32(4):基于构件库的点亮LED
概述第一、二章节中,STM32是纯裸开发,通过自定义地址来进行写寄存器;STM32其实提供了底层固件库,定义好了通用功能,所以如果是常规功能只需要调用固件库的API即可实现功能。所以我在番外篇说了,其实熬过了前两章,后面的内容反而要简单。从本章开始,我们的绝大多数的开发内容都是基于STM32的固件库进行的。从main函数说起用c编写函数,都知道入口函数是main函数,程序跑起来一定会找main函数;所以我们的编译器在编译的时候还会做强制的main函数重复检测,避免定义多个main函数执行的时候导致不原创 2022-01-06 21:18:50 · 177 阅读 · 0 评论 -
STM32(3):番外篇之STM32名字解析
Let's GO!能够看到这里的盆友,相信前面两个章节并没有劝退,我觉得前面两个章节可能是难度最大的两篇了,如果能够搞掂,后面的内容其实反而简单。但是前面两个章节是嵌入式开发"生存必要的技能"(理解寄存器以及查看手册),否则后面也是寸步难行。Go! Go! Go!让我们继续探索STM32的世界吧。番外:名字解析这一回我们番外一下,八卦一下STM32的名称,让你实现“管中亦可规豹”;我现在手头的这块板子是:STM32F103C8T6STM32:产品系列ST是STMi原创 2022-01-04 20:17:28 · 324 阅读 · 0 评论 -
STM32(2):点亮LED(下)
概述点亮LED表面看起来貌似很简单,但是如何想要搞清楚其背后牵涉的每一行代码的具体含义,还是需要花费一些功夫的,而且,只有把LED的背后只是搞清楚了,才算嵌入式开发的基础入门。今天我们就来研究一下LED的重头戏,RCC_Init;什么是RCC?上手册:RCCRCC,Reset and Clock Control,重置以及时钟控制;STM32手册使用了两个章节来对其进行描述,可见它的重要性;对于RCC的初始化也是比较复杂,里面包含了STM32对于时钟的相关机制,代码总览void RCC_init原创 2022-01-03 20:49:06 · 382 阅读 · 0 评论 -
STM32(1):点亮LED(上)
概述今天我们的开启了STM32开发的第一站:点亮LED,今天的内容包含了很多基础的知识,也有一些劝退的意味,不过,如果你能够扛得住这波攻势的,我觉得你高嵌入式方面真的是“风骨清奇,可造之材”。程序总览typedef unsigned short int uint16_t;typedef unsigned int uint32_t;#define __IO volatile#define PERIPH_BASE ((uint32_t原创 2022-01-03 19:51:52 · 875 阅读 · 3 评论 -
STM32(10):USART
概述今天研究一下USART模块,USART模块最常用的功能之一就是输出log,下面就研究一下利用USART模块来输出log的实验代码。USART,Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步/异步接收/发送器;通过名字可以看出来,USART模块支持同步和异步模式,支持接收和发送操作。那么什么是同步/异步呢?同步通信:是指通信双方共享一个时钟节拍,一般情况需要发送方向接收方发送数据同时还要提供时钟;接收方根据发送方提供原创 2022-02-11 19:23:24 · 3536 阅读 · 0 评论 -
STM32(9):定时器
概述本章主要讲述一下定时器的实现,定时器顾名思义,就是到了指定的时间就触发中断,所以定时器本身是中断的一种应用。本节的例子中实现的每秒输出一个字符。代码概览 #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_exti.h" #include "misc.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "st原创 2022-01-28 19:29:30 · 773 阅读 · 0 评论 -
STM32(8):番外篇之“上升沿 vs. 下降沿”
D触发器的约定D触发器里面约定的时钟是上升沿敏感(postedge),reset(重置)是下降沿敏感(negedge);这种是约定俗称;如果时钟改成是下降沿敏感,就是反向D触发器;上升沿下降沿互换在绝大多数场景下是没有问题的,但是有些特殊场景是不建议使用的。而且建议尽量不要使用双沿触发,即对于时钟的触发最好同步设置为上升沿/下降沿触发。双沿触发的场景场景描述下面使用两个D触发器来说明双沿触发问题,如下图所示是两个D触发器,其中D(ata)口用于接收数去,Q口用于输出数据,clk口用于接收时钟脉冲;下原创 2022-01-20 22:23:26 · 3778 阅读 · 0 评论 -
STM32(7):中断方式让按键点亮LED
概述上一节“STM32(5):轮训方式让按键点亮LED”实现了基于轮训的方式,实现点亮LED灯,本节将基于另外一种通信方式:中断方式,来实现点亮LED。代码概览void delay(unsigned int time){ unsigned int i = 0; while (time--) { i = 1000000; while (i--)原创 2022-01-20 21:56:35 · 3639 阅读 · 0 评论 -
STM32(6):轮训方式让按键点亮LED
概述CPU和外设通信的方式有轮训和中断两种方式;所谓轮训就是主动询问某个状态,看看是否是某个值,如果是则采取行动;中断则是一旦发生了,会主动通知CPU;本章来研究一下通过如何轮训的方式来响应按键事件。代码概览#include "stm32f10x_gpio.h"#include "stm32f10x_rcc.h"#include "../lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_exti.h&quo原创 2022-01-11 06:36:17 · 2025 阅读 · 0 评论 -
STM32(5):番外篇之stm32固件库工程搭建
创建工程目录文件首先,创建好工程文件目录,比如task4_exit;然后在里面创建一个proj目录,创建工程选择的文件夹就选择proj,这样创建Keil工程文件都是放在proj里面;接着在task4_exit的根目录创建一个main.c(空文件即可);最后在task4_exit的根目录放入如下固件库文件:1)startup_stm32f10x_md.s,程序运行启动汇编文件;2)stm32f10x.h,微控制器专用头文件;3)stm32f10x_conf.h,固件库配置文件;4)system原创 2022-01-07 21:33:44 · 527 阅读 · 0 评论