单片机基础
控制LED按键控制外部中断串口发送串口中断使用DMA搬运数据定时器内部定时器更新中断外部时钟定时器从模式定时器输入捕获PWM输出旋转编码器控制舵机ADCADC多通道采集LED屏幕通过手册写驱动库BOOT对于外设的驱动库将其拖入到文件中后.c,.h文件一般只需要关注配置的引脚然后在主函数直接调用函数即可。1. 控制LED在cubemx中选择led所在的引脚配置为推挽输出输出高低电平需要根据led的连接方式确定刚开始是灭还是亮。在主函数中writepin函数进行点亮。2. 按键控制在cubemx中设置上拉输入这里具体需要看按键原理图然后直接在主函数判断如果是低电平也就是按下如何处理。3. 外部中断在cubemx中选择外部中断引脚可以选择上升沿下降沿触发配置好后在it文件里面找到callback函数在callback函数内部对接受进行处理。4. 串口发送简单的轮询在cubemx中开启串口后直接在主函数里面transmitreceive即可注意这里只能接受定长数据否则数据错乱。5. 串口中断在cubemx中打开中断在函数中开启receive_it这里是打开中断接受为了防止只能接受一次需要在回调函数再次开启在回调函数处理即可。这里说的是接受中断发送中断直接写就可以不用再调用回调函数6. 使用DMA搬运数据在cubemx中打开DMA通道配置地址内容自增这里没搞明白每次搬运的字节数没有搞明白每次先默认字节然后生成代码后其代码方法与中断一致。使用DMA还是有中断只不过是将cpu搬运数据这一过程交给dma处理了。还是cplcallback函数回调这是dma的传输完成中断。如果想要接受不定长数据需要借助别的中断也就是串口空闲中断这次只要接受数据寄存器上没有数据输入才会进入中断与前者区分。exReceivetoidle这里开启串口空闲函数其对应的回调函数为uartex_rx_eventcallback回调函数。开启了DMA的不定长数据接受后接受完输入的数据会进入回调函数此时通过hal_uart_transmit_dma()函数发送这里有一个入参可以确定不定长数据的长度。发送即可。DMA有个数据接受过半中断当数据量达到设置的最大值的一半以后也会触发uartex_rx_eventcallback关闭DMA传输过半中断函数__HAL_DMA_DIAABLE_IT,第二个参数为DMA_IT_HT。总的说将IT函数改为DMA即可实现DMA数据收发将启动函数改为toidle回调函数为eventcallback可以实现不定长数据收发。对于寄存器来说地址只有一字节的长度所以地址也就不需要变化内存需要挨个取数据所以内存变化7.定时器这里使用定时器计使1s使用定时器的时候一定要开启定时器也就是HAL_TIM_Base_START()这里需要使用sprintf组合后发送才不会乱码。__HAL_TIM_GET_COUNTER__HAL_TIM_SET_COUNTER__HAL_TIM_GET_AUTORELOAD__HAL_TIM_SET_AUTORELOAD__HAL_TIM_SET_PRESCALER所有设置的值都被存储在影子寄存器。8.内部定时器更新中断开启中断使用periodelapsedcallback更新中断在回调函数里面写逻辑即可。这里开启HAL_TIM_BASE_START_IT时候也自动开启了基本功能。选择更新中断9.外部时钟定时器对来自GPIO上信号进行计数。TI1_ED只能双边沿触发TI_FP可以选择触发方式。这里有单独的外部时钟模式2通道可以在从模式控制器被占用时候单独引入外部信号。这里有个例子使用外部时钟本质和内部时钟一样也就是说内部时钟外部触发器TI1,TI2地位等价。只不过需要外部信号作为时钟代码完全一样。Filter的数值是使用内部时钟作为判断。这里的外部时钟模式1。TI1,TI2没太搞明白。外部时钟模式1通过触发器接入选择外部时钟模式1后才可以选择TIP,TIED。10.从模式定时器除了外部定时器1是与上面共用。还有reset modegated mode trigger mode。外部时钟模式1给定时器提供计数信号。其他三种控制定时器的工作状态。复位模式对定时器计数状态复位。复位模式也就是在自动重装载的基础上再来一个中断可以一个定时器不干扰基本定时器的计数。比如检测到一个上升沿打破计数输出中断。并重新计数。此时会进入定时器更新中断。这也是另外三个模式的主要功能区别门电路当输入信号为高电平才开始计数否则不计数。这里因为不进入中断所以在循环中判断当检测到高低电平此时清零标志位。并发送从模式触发此时停止计数。触发模式检测到边沿时进行计数。只需检测到一个上升沿不需要像门电路一样一直处于高电平。触发模式仅能启动定时器不能停止定时器。触发模式配合单脉冲模式可以实现单脉冲定时器计数到自动重装载时停止计数。也就是停止在0。补充防止重启时进入更新中断一次。11.输入捕获得知PA10为TIM1的通道3此时设置其通道3为直接模式通道4为间接模式。此时有直接模式通道3间接模式通道4。配置完毕后需要开启定时器以及输入捕获。输入捕获为ic_start()显示捕获定时器1的通道3。使用中断对应的中断回调函数为ic_capturecallback。读取具体的捕获值的函数为总的来说选择一个有输入捕获功能的引脚。一个使用直接捕获获得上升沿数据一个作为间接捕获获得下降沿数据。12.PWM输出输入捕获/输出比较寄存器输出比较模式PWM模式1PWM模式2使用PWM生成模式输出PWM波设置的为pwm中高电平的时间改变high low设置高低电平时间。开启PWM通道HAL_TIM_PWM_STATR(htim,CHANNEL)这里常用的函数有13.旋转编码器(Encoder)将A,B相信号设置A为上升沿触发中断读此时B相的高低电平。通过定时器来计时。这里可以直接将旋钮接入外部时钟模式2来进行计数。对于转速快的。使用编码器接口编码器接口对上下边沿均敏感。在上下边沿均会加1。具体的连接方式为因为计数编码器的脉冲所以不用设置时钟源直接选择组合通道设置。选择计数时刻POLARITY:设置有效电平为高电平还是低电平。IC这里是直接捕获也就是TI1FP1,TI2FP2。然后这里说一下按键按键这里按下接低电平松开没有外部上拉这里内部上拉保持按下时候为低电平不按下为高电平。编码器模式:14.控制舵机首先判断其pwm工作范围然后选择引脚的PWM生成模式这里cubemx设置是设置了使用内部时钟然后在此基础上选择占空比。以此生成pwm波.注意这里使用pwm生成一定要开启pwm生成也就是__HAL_TIM_PWM_STATR()函数。TB6612模块输入IN1,IN2PWM波控制输出OUT1,OUT2。衰减指的是电流与后面刹车滑行对应。按照表格写代码也就是一个低电平一个输入pwm波。这个过程是选择一个引脚推挽输出低电平另一引脚通过pwm输出高电平。控制速度。15.ADC模拟数字转化逐次逼近法二分比较确定电压值。实际操作过程。启动ADC2.采样转化3.获取计算。对于stm32f103有16个通道可以进行采样称其为16个外部通道。两个内部通道一个是内部温度传感器一个是内部参考电压。规则组像是一个排队的表格当将通道注册ADC会对此通道进行采样转化。也可以一次注册多个通道让ADC进行采样转化。实战测量电压值。第一要点是ADC时钟不要太快不要超过14mhz。否则会有警告。这里使用的函数有等待转换完成的函数校准函数:注意校准函数要在while循环外示例这里是单次转化所以adc_start()在循环内部。可以使用连续转化此时只需要在while循环外部开启一次转换即可。此时代码变为16. ADC多通道采集此时多通道需要开启扫描模式。此时多配合DMA搬运数据使用。此时DMA也可以设置为循环模式。采样周期按照外设要求选择。接着是DMA配置首先是外设到内存内存地址自增这里是因为相比之下接受外部数据此时单片机为内存。内存地址自增防止数据覆盖。这里因为ADC的分辨率是12位所以选择16位halfword。这里要注意接受数组的位数要匹配halfword是uint16_t,word是uint32_t。在代码中每一个是12位数所以用四个uint16类型即可表示。最后参数是数组的长度注意区分。这里需要注意如果不选择持续转换与DMA循环此时需要在循环里面开启ADC_DMA,然后在回调函数里面处理如果选择了持续转换与DMA循环此时随时可以取数据了在循环外开启。并直接在while循环里面处理即可。ADC:在设置采样频率时必须满足设置的采样频率大于待采样的2倍。奈奎斯特定理。DMA规则组可以同时转化16个通道但是只有一个数据寄存器。只会保留最后的一个所以配合DMA使用注入组有四个通道不用担心数据被覆盖。开始触发有规则组注入组。双ADC模式。DMA规则组可以同时转化16个通道但是只有一个数据寄存器。只会保留最后的一个所以配合DMA使用注入组有四个通道不用担心数据被覆盖。开始触发有规则组注入组。双ADC模式。单次转换非扫描模式转换完成eoc置一此时读取。下次转换时候再开启连续转换非扫描模式不需要判断标志物想要读的时候直接读取。单次转换扫描模式需要自己设置通道数全部转换完成eoc置一手动产生下一次开始新转化。连续转换扫描模式左右对齐左移一次相当于数乘2如果不需要高分辨率此时取高八位。一般选择右对齐就可以。采样时间如果外部电源一直变化此时不准确所以使用一个电容采集电压进行判断。闭合采样开关然后断开。采样时间越大越能避免毛刺干扰。转换时间采样时间12位adc转换周期。校准执行一次校准。17.LED屏幕Set_pixel():驱动库使用使用方法使用一般其他的驱动库引用的方法一样。其中汉字的字模17.通过手册写驱动库1.找到厂家给的引脚配置说明图。2. 通信协议芯片驱动使用现有驱动文件拖入.c,.h文件-在keil中加入.c文件如下操作引入.h文件路径。将头文件加入公共头文件此时可以在其他主函数中引用公共头文件调用其中的函数。输出模式的下拉是保持引脚在未被驱动的时候默认保持低电平。新建自己的文件夹18.BOOT

相关新闻

微信记录2020(二)

微信记录2020(二)

瘟疫成灾,像洪水猛兽,被迫上山落草,这救济粮(红豆豆),够不够吃半年?不够,水库捕鱼。哈哈!02021610在外面混,要保护好自己,病毒汹涌啊!…

2026/7/3 16:27:06 阅读更多 →
计算机毕业设计 | SpringBoot+vue学生干部管理系统 高校教务管理系统(附源码+论文)

计算机毕业设计 | SpringBoot+vue学生干部管理系统 高校教务管理系统(附源码+论文)

1,绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展,用了短短的几十年时间就风靡全球,使得全球各个行业都进行了互联网的改造升级,标志着互联网浪潮的来临。在这个新的时代,各行各业都充分考虑互联网是否能与本行…

2026/7/5 16:32:55 阅读更多 →
中医五行和阴阳本质是什么?精确化依据是什么?

中医五行和阴阳本质是什么?精确化依据是什么?

中医的宇宙本源根基——从量子全息引力看阴阳五行的数学物理本质中医作为中华传统智慧的瑰宝,历经数千年临床实践验证其有效性,却常因“阴阳五行”的传统表述被贴上“抽象模糊”的标签,甚至被质疑缺乏科学根基。实则,阴阳的平衡法…

2026/7/7 7:10:15 阅读更多 →

最新新闻

不懂ASO推广=浪费流量?这份关键词优化指南请收好

不懂ASO推广=浪费流量?这份关键词优化指南请收好

应用商店优化是可以让你的应用出现在更多用户面前的一种行之有效的方法。为此,你需要在应用的元数据中使用正确的关键词,帮助苹果和谷歌的搜索算法了解何时在搜索结果中展示你的应用。如果做得好,你的应用就能被更多人看到,而更多…

2026/7/9 8:20:12 阅读更多 →
AGW 跨模态行人重识别实战:SYSU-MM01 数据集 80 epoch 训练,Rank-1 达 77.8%

AGW 跨模态行人重识别实战:SYSU-MM01 数据集 80 epoch 训练,Rank-1 达 77.8%

AGW跨模态行人重识别实战:从SYSU-MM01数据集到77.8% Rank-1的完整实现路径跨模态行人重识别技术正在重塑智能安防领域的格局。当传统RGB摄像头在低光照环境下失效时,红外成像系统依然能稳定捕捉行人特征。如何让两种模态的数据在特征空间中"对话&qu…

2026/7/9 8:20:12 阅读更多 →
计算机毕业设计之基于SSM框架个人财物系统的设计与实现

计算机毕业设计之基于SSM框架个人财物系统的设计与实现

随着经济的快速发展和人们生活水平的不断提高,个人财务管理的重要性日益凸显。传统的财务管理方式已难以满足用户对财物管理精细化、智能化的需求,亟需借助信息化技术构建高效便捷的管理系统。本设计旨在基于SSM框架,运用Java开发语言&#x…

2026/7/9 8:18:11 阅读更多 →
Java之动态代理 DynamicProxy

Java之动态代理 DynamicProxy

动态代理概念 在学习动态代理之前,先了解静态代理,可参考静态代理 静态代理核心缺陷 类爆炸:一个接口实现类,必须手写一个专属代理类,业务类越多,代理类文件成倍增加;增强逻辑无法复用&#…

2026/7/9 8:14:09 阅读更多 →
为什么不接负极, 电器就 无法工作?

为什么不接负极, 电器就 无法工作?

既然正极有电(比如 5V),电已经顺着导线流进电器(芯片、灯泡)里了,电器不就该拿到能量开始工作了吗?为什么非要连回负极呢?” 水流与水车比喻(直观理解能量交换&#xff0…

2026/7/9 8:10:05 阅读更多 →
np.percentile和np.clip

np.percentile和np.clip

异常值清洗:q1, q99 np.percentile(raw, [1, 99]) raw np.clip(raw, q1, q99) # 简单的限幅假设我们现在又这么一组体温数据:raw [36.5, 36.6, 36.4, 36.7, 36.5, 36.6, 36.4, 36.5, 36.6, 36.7,36.5, 36.6, 36.4, 36.7, 36.5, 36.6, 36.4, 36.5, 3…

2026/7/9 8:10:05 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻