-
2021-10-29 19:57:31
STM32
开发环境
- 安装MDK软件
- 在桌面创建一个用于专门保存是stm32 的文件夹
- 安装芯片包
- 打开软件新建工程(Project)保存到文件夹
- 将启动文件添加到文件夹
点亮LED灯
-
配置使能APB2的GPIOC时钟
*(unsigned int *)0x4002 1010 |= 0x01 << 4 //起始地址+偏移地址 0x4002 1000 + 0x10
-
配置GPIOC13端口输出模式
*(unsigned int *)0x4001 1004 |= 0x01 << 20 //起始地址+偏移地址 0x4001 1000 + 0x04
-
配置GPIOC13为输出低电平
*(unsigned int *)0x4001 100C &=~ (0x01 << 13) //起始地址+偏移地址 0x4001 1000 + 0Ch
中断
中断类型
- 系统异常,体现在内核水平
- 外部中断,体现在外设水平
NVIC简介
NVIC:嵌套向量中断控制器,属于内核外设,管理着包括内核和片上所有外设的中断相关的功能
两个重要的库文件:core_cm3.h和misc.h
NVIC寄存器简介
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y5LaC3QT-1635508650237)(C:\Users\86150\Desktop\截图\nvic.png)]
中断优先级的定义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OISFWsk8-1635508650241)(C:\Users\86150\Desktop\截图\nvic1.png)]
中断编程的顺序
- 使能中断请求
- 配置中断优先级分组
- 配置NVIC寄存器,初始化NVIC_InitTypeDef
- 编写中断服务函数
EXTI简介
外部中断/事件控制器
输入线
-
有20根输入线(EXTI0、EXTI1~EXTI19)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p9gfkjRZ-1635508650244)(C:\Users\86150\Desktop\截图\EXTI.png)]
-
通过外部中断寄存器(AFIO_EXTICR1、AFIO_EXTICR2、AFIO_EXTICR3、AFIO_EXTICR4)来选择
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FtinmL6g-1635508650247)(C:\Users\86150\Desktop\截图\EXTI1.png)]
-
EXTI初始化结构体
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z2BvO6Fb-1635508650249)(C:\Users\86150\Desktop\截图\exti3.png)]
编程流程
-
初始化用来产生中断的 GPIO
-
初始化 EXTI
-
配置 NVIC
-
编写中断服务函数
-
主函数调用
SysTick——系统定时器
SysTick 简介
SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是 一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系 统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生 一次中断,以此循环往复。
SysTick 寄存器介绍
SysTick—系统定时器有4个寄存器,简要介绍如下。在使用SysTick产生定时的时候, 只需要配置前三个寄存器,最后一个校准寄存器不需要使用。
寄存器名称 寄存器描述
-
CTRL SysTick 控制及状态寄存器
位段 名称 类型 复位值 描述 16 COUNTFLAG R/W 0 如果在上次读取本寄存器后, SysTick 已经计 到 了 0,则该位为 1。 2 CLKSOURCE R/W 0 时钟源选择位,0=AHB/8,1=处理器时钟 AHB 1 TICKINT R/W 0 1=SysTick 倒数计数到 0 时产生 SysTick 异常请 求,0=数到 0 时无动作。也可以通过读取 COUNTFLAG 标志位来确定计数器是否递减 到 0 0 ENABLE R/W 0 SysTick 定时器的使能位 -
LOAD SysTick 重装载数值寄存器
位段 名称 类型 复位值 描述 23:0 RELOAD R/W 0 当倒数计数至零时,将被重装载的值 -
VAL SysTick 当前数值寄存器
位段 名称 类型 复位值 描述 23:0 CURRENT R/W 0 读取时返回当前倒计数的值,写它则使之清 零,同时还会清除在SysTick控制及状态寄 存器中的 COUNTFLAG 标志 -
CALIB SysTick 校准数值寄存器
通信的基本概念
数据的传送方式
- 并行通讯
- 串行通讯(USART、IIC、SPI)
串行与并行通信的特性对比
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CgbwlvnS-1635508650250)(C:\Users\86150\Desktop\截图\通信.jpg)]
数据通信方向
- 全双工
- 半双工
- 单工
数据同步方式
- 同步通讯
- 异步通讯
通信的速率
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VN57g78S-1635508650252)(C:\Users\86150\Desktop\截图\通信2.jpg)]
码元:传输的信息是码元(例如3.3V、0V),所以大多数情况下一个码元往往对应一个二进制位。
USART
串口通信协议简介
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Whw1mdt-1635508650253)(C:\Users\86150\Desktop\截图\usart.png)]
-
常用标准
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-asqBs9Ut-1635508650254)(C:\Users\86150\Desktop\截图\usart2.png)]
ps:RS-232与TTL的区别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ybxLswTF-1635508650255)(C:\Users\86150\Desktop\截图\usart3.png)]
DMA
DMA简介
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O2Dz48uP-1635508650257)(C:\Users\86150\Desktop\截图\DMA.png)]
PS:上图DMA2应该是有5个通道,而不是7个
更多相关内容 -
STM32_内核外设_CAN
2021-01-06 06:03:51CAN构成STM32F1内核外设CAN的构成CAN的数据帧图示讲解控制/状态配置寄存器CAN_MCR寄存器CAN_BTR测试模式讲解位时序及波特率发送邮箱发送报文的流程寄存器接收FIFO验收筛选器筛选器分类按长度分类按模式分类标识符... -
STM32F0标准外设函数库手册
2018-04-21 09:09:27里面包含chm原版文件以及解压后的网页文件,原版文件为全英文,中文可通过网页文件使用浏览器进行中文翻译。 -
stm32 DMA通道外设基地址的配置
2020-08-11 04:46:25看了许多资料都没有讲如何配置DMA通道外设基地址 ...#define ADC1_DR_Address ((u32)0x4001244C) 就是ADC1的外设基地址(0x4001 2400)加上ADC数据寄存器(ADC_DR)的偏移地址(0x4c)计算得到的。 -
STM32G0通用外设+UCPD讲解
2019-04-15 11:18:33内置两份文档,STM32G0资源全面讲解,包括内置Tpye-c,与市面上F0/F1对比,适合初次或全面了解G0的童鞋 -
STM32F1XX官方标准外设软件库V3.5
2020-12-11 14:36:02STM32F1XX官方标准外设库V3.5,从ST官方下载的最新库。 -
STM32的基本外设代码.rar
2021-06-23 18:38:01串口DMA空闲接收,usb等 -
STM32常用外设驱动程序
2017-05-01 09:12:18STM32常用外设驱动程序 -
STM32H743IIT6使用STM32CUBEMX配置大多数外设手册.pdf
2019-05-27 17:48:14偶然间论坛看到大牛分享的 STM32H743IIT6使用STM32CUBEMX配置大多数外设手册,在这里分享给大家。共同进步 -
STM32中如何配置片内外设使用的IO端口
2020-08-18 23:16:52文章简单介绍了STM32中片内外设使用的IO端口的配置问题,以及一些细节问题和情况 -
STM32F0片上外设培训手册中文
2022-04-29 18:50:36ST官方的STM32F0片上外设培训手册中文 包含iic uart spi usb timer clock flash rcc dma exti adc mo内核的详细介绍 中文的 ST官方出品 -
stm32f407部分外设驱动
2017-12-07 21:38:14stm32f407部分外设驱动,can总线,定时器,gpio,串口,系统时钟等 -
STM32F103C8T6模块外设资源分布图.jpeg
2017-10-18 00:10:47STM32F103C8T6模块外设资源分布图.jpeg STM32F103C8T6模块外设资源分布图.jpeg STM32F103C8T6模块外设资源分布图.jpeg STM32F103C8T6模块外设资源分布图.jpeg STM32F103C8T6模块外设资源分布图.jpeg STM32F103C8T6... -
STM32G4的外设篇
2022-01-30 18:03:51STM32G4芯片外设详解包含 1.ADC外设 2.DAC外设 3.片内运放 4.片内比较器 5.滤波算法加速器(FMAC) -
STM32+DMA+串口发送数据(存储器到外设数据传输)
2022-01-05 00:00:19STM32使用DMA功能使串口发送数据的同时,LED灯不停的闪烁 -
STM32与其他外设串口数据帧收发纯C代码详细的使用方式
2021-08-18 10:21:12STM32与其他外设串口数据帧收发纯C代码详细的使用方式 -
VS Code STM32开发笔记 -片上外设-串口
2022-03-12 22:49:476.完善片上外设驱动usart.c(1.中断回调,2.printf支持) 7.完善main.c完成测试 1.cubemx创建工程配置基础片内外设(swd接口,时钟,NVIC) 2.配置串口 3.生成makefile工程 4.vscode打开并创建工程目录 1....流程:
1.cubemx创建工程配置基础片内外设(swd接口,时钟,NVIC)
2.配置串口
3.生成makefile工程
4.vscode打开并创建工程目录
5.编辑makefile文件
6.完善片上外设驱动usart.c(1.中断回调,2.printf支持)
7.完善main.c完成测试1.cubemx创建工程配置基础片内外设(swd接口,时钟,NVIC)
2.配置串口
3.生成makefile工程
4.vscode打开并创建工程目录
1.工程根目录下创建hwl、fml、bll、apl四个目录【此步可以忽略,为以后架构设置做准备】
2.makefile文件在头文件处添加以上四个目录
6.完善片上外设驱动usart.c(1.中断回调,2.printf支持)
(以代码为准,图片只是指名位置)/** * @brief 串口回调函数 * 接受串口发送的消息,同时转发出来 * !使用ch,每次设备重启后的第一个字符不能接受,此后所有接受正常。 * @param huart串口设备名 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { static uint8_t ch[1] = {0}; HAL_UART_Transmit(&huart1, ch, 1, 1000); HAL_UART_Receive_IT(&huart1, ch, 1); } #if defined(__GNUC__) /** * @brief 实现GNU编译环境下的printf()函数 * !如果使用armcc则使用另外的实现方法,此处暂未实现 * @param fd * @param pBuffer * @param size * @return int */ int _write(int fd, char *pBuffer, int size) { HAL_UART_Transmit(&huart1, pBuffer, size, 0xff); return size; } #elif defined(__ARMCC__) #endif
至此,已经实现了串口的驱动编写,以下内容为驱动的测试过程:
7.完善main.c完成测试
1.HAL库在每次接受后自动关闭中断,需要每次调用HAL_UART_Receive_IT()来开启中断,因此在上一步,每次发送完成后需要调用此函数开开启中断,测试函数中也需要提前开始中断。
2.主循环测试printf()函数。记得加入延时.
/* USER CODE BEGIN WHILE */ uint8_t pDataBuffer[128] = {0}; HAL_UART_Receive_IT(&huart1, pDataBuffer, 1); while (1) { printf("Hello World!"); HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */
注意事项:
1.波特率要对上 -
STM32_ILI9341_HWSPI:使用STM32的硬件SPI外设来驱动ILI9341 TFT显示器的最小代码示例
2021-05-12 18:50:01概述 这是一个最小的示例项目,展示了如何使用STM32的硬件SPI外设与ILI9341 TFT显示器进行通信。 -
STM32F0内部FLASH操作程序
2019-04-05 20:31:32自己改写的STM32F0内部FLASH程序,做一些小东西时,保存参数少时候使用,减少外设存储芯片。 -
stm32f0xx_stdperiph_lib_um(STM32F0标准外设函数库手册)
2014-01-16 20:12:50stm32f0xx_stdperiph_lib_um(STM32F0标准外设函数库手册) -
stm32_DMA_存储器到外设传输.rar
2019-10-16 21:59:41stm32_DMA_存储器到外设传输,含STM32Keil 工程文件。 -
AN5348_STM32器件上的FDCAN外设的应用手册.pdf
2020-06-13 15:34:47本手册适用于STM32G0, STM32G4, STM32H7, STM32L5,STM32MP1系列 -
AN2561_STM32F10xxx CAN应用实例_stm32_CAN_STM32外设实例_
2021-09-28 20:29:29这篇文档是为提供STM32F10xxx CAN外设使用的应用程序 -
电子-STM32通信外设应用级库函数.pdf
2019-09-05 13:27:29电子-STM32通信外设应用级库函数.pdf,单片机/嵌入式STM32-F0/F1/F2 -
STM32IO口复用时外设不工作问题的解决
2020-08-04 06:55:13本文介绍了在使用STM32单片机IO口复用功能时外设不工作的问题和解决方法。 -
STM32F030标准外设固件库
2018-11-16 10:27:28STM32F030标准外设固件库 官网上下载的 标准版 -
STM32库函数代码自动生成器_stm32_库函数stm32_STM32库函数代码自动生成器_
2021-10-04 07:56:32函数代码点击鼠即可生成,常用外设驱动都有,非常方便 -
STM32以太网进阶培训Part1_STM32以太网外设(2018.03).pdf
2019-09-12 02:17:07STM32以太网进阶培训Part1_STM32以太网外设(2018.03) -
STM32F1单片机LED外设操作例程
2018-06-21 13:00:24例程制作主要参考文档为野火单片机固件库开发手册,为增强代码可读性与移植性,使用结构体操作外设的硬件配置方案