stm32

STM32 Makefile的一次bug解决过程

拥有回忆 提交于 2020-02-12 01:29:26
背景 迁移华为的liteOS到STM32F4的开发板上,按照官方的步骤修改makefile后报错: arm-none-eabi-gcc.exe: warning: '-x assembler-with-cpp' after last input file has no effect arm-none-eabi-gcc.exe: fatal error: no input files compilation terminated. 解决过程 根据Makefile的报错地点可以看出是在对.S文件的编译过程中找不到文件所致,将结果打印出来: arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -DUSE_STDPERIPH_DRIVER -DSTM32F407xx -DSTM32F40_41xxx -I./Inc -IProjectDrivers/Inc -IProjectDrivers/Inc/Inc -IProjectDrivers/Inc/CORE -IDrivers/CMSIS/include -I./Src/SYSTEM -I./Src/MALLOC -I./ProjectDrivers/HARDWARE

STM32 hal库串口DMA模式收发定长数据

♀尐吖头ヾ 提交于 2020-02-12 00:19:32
//DMA接收定义为循环模式,只能接受定长数据 //串口DMA中断调用的回调函数和串口接收中断是同一个 uint8_t rxch [ 5 ] ; uint8_t trch [ ] = "transmit dma:\r\n" ; int main ( void ) { HAL_UART_Transmit_DMA ( & huart1 , trch , 15 ) ; HAL_UART_Receive_DMA ( & huart1 , rxch , 5 ) ; while ( 1 ) { } } //DMA接收完成回调函数和这是同一个 void HAL_UART_RxCpltCallback ( UART_HandleTypeDef * huart ) { if ( huart -> Instance == USART1 ) { printf ( "%s\r\n" , rxch ) ; HAL_UART_Transmit_DMA ( & huart1 , rxch , 5 ) ; } } //DMA传输完成回调函数和这是同一个 void HAL_UART_TxCpltCallback ( UART_HandleTypeDef * huart ) { uint8_t tx_str [ ] = "Data Transfer completed\r\n" ; HAL_UART_Transmit

STM32使用DMA控制器试验总结

偶尔善良 提交于 2020-02-11 14:32:57
在使用串口DMA试验过程中,遇到了一些问题,通过试验找到了问题所在,也对DMA的应用有了新的认识,仅以此分享给大家,不足之处请多多指教。 DMA初始化 // 串口对应的DMA请求通道 # define USART_TX_DMA_CHANNEL DMA1_Channel4 # define USART_TX_DMA_IRQ DMA1_Channel4_IRQn # define USART_TX_DMA_IRQHandler DMA1_Channel4_IRQHandler // 外设寄存器地址 # define USART_DR_ADDRESS (USART1_BASE+0x04) // 一次发送的数据量 # define SENDBUFF_SIZE 250 /** * @brief USARTx TX DMA 配置,内存到外设(USART1->DR) * @param 无 * @retval 无 */ void USARTx_DMA_Config ( void ) { DMA_InitTypeDef DMA_InitStructure ; DMA_DeInit ( USART_TX_DMA_CHANNEL ) ; // 开启DMA时钟 RCC_AHBPeriphClockCmd ( RCC_AHBPeriph_DMA1 , ENABLE ) ; // 设置DMA源地址

STM32学习摘要①

浪尽此生 提交于 2020-02-11 06:47:55
1,stm32芯片解读 //A-看看就行,大致了解下32的结构,了解下32要怎么学 2,开发环境搭建-软件安装//B-看看就行,装软件1万个法… 3,程序下载方法2://C-jlink程序下载//这个细看下 网上买个jlink ob不贵20左右这个和51学习的最大区别可以线上调试,再也不用软件仿真了 4,新建工程模板-基于固件库//B-看看,搭不出来用它的 5,stm32 GPIO工作原理//C-细看,32功能丰富 详细了解下每种模式的实际用途和应用方面,不会的话百度,这个一定要搞明白 6,手把手编写跑马灯实验-库函数//C-细看 第一次编写 他编的比较详细 模仿至上 原理可能开始都懂不起 7,按键输入实验-GPIO做输入//C-细看 同上 8,STM32时钟系统精讲//C-细看 32最难的地也是最重要的地方 这不明白后面看着就很难受 9,JLINK在线调试+软件调试 方法与技巧//C-细看 教你如何硬件仿真 10,NVIC中断优先级管理//C-细看 原理要懂差不多 32的中断比51复杂很多 如果管理不好程序很容易出问题 11,串口通信原理讲解-UART//C-细看 原理一知半解就行 32和51的串口通信原理一样 12,STM32串口寄存器库函数配置方法+手把手教你写串口通信实例//C-细看 这个我也不说多重要了吧 做过小车的都知道 照着他的步骤抄 他会解释每个代码的意义 13

stm32内存管理

烂漫一生 提交于 2020-02-10 19:04:54
stm32内存管理 再讲stm32内存管理之前,我想先向大家介绍几个概念: 自然对其 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 c语言中__align()关键字的作用与内存对齐的原理 在32位CPU中,CPU访问内存一次访问32位,4个字节,一个字。哪怕只读一个char类型的数据,也会读出这个数据所在的4个字节的地址来。所以编译器为了让程序以最少的次数就可以读取到完整的数据,会自动给变量分配的地址可以被4字节整除,比如我们命令CPU读取一个float类型的数据,如果这个float类型的数据的地址为0x0000 0004 ,那么CPU只需要从这个地址开始读取4个字节,一条指令就可以把float类型的数据读取出来,但若它的地址为0x0000 0003,那么就需要先从0x0000 0000读最后一个字节,再从0x0000 0004 读前3个字节,在组合成一个完整的float类型的数据才行,原来一条指令的时间,现在需要3条指令。这就是我们为什么要保证内存是对齐的。 __align __align 关键字指示编译器在 n 字节边界上对齐变量。 __align 是一个存储类修饰符。它不影响函数的类型。 其中:n 是对齐边界。 对于局部变量,n 值可为

STM32 SD卡 TF卡 SPI 接口

蓝咒 提交于 2020-02-10 17:03:07
SD卡和TF卡管脚定义有区别,需要注意。 * +-------------------------------------------------------+ * | Pin assignment | * +-------------------------+---------------+-------------+ * | STM32 SPI Pins    | SD   | Pin |  TF Pin * +-------------------------+---------------+-------------+ * | SD_SPI_CS_PIN   | ChipSelect  | 1 |    2 * | SD_SPI_MOSI_PIN / MOSI  | DataIn  | 2 |    3 * | | GND | 3 (0 V)  | * | | VDD | 4 (3.3 V) |     |   4 * | SD_SPI_SCK_PIN / SCLK    | Clock   | 5 |    5 * | | GND | 6 (0 V)   |  6  |   6 * | SD_SPI_MISO_PIN / MISO    | DataOut  | 7 |   7 * +-------------------------+---------------+--

STM32的CCM RAM

自作多情 提交于 2020-02-10 16:15:16
STM32F407ZGT6的Flash大小为1MB,SRAM大小为(128KB+64KB)。 这里SRAM之所以分开表示是因为在芯片内部前面的128KB和后面的64KB地址不是连续的,后面的64KB在ST官方叫做CCM (core coupled memory) ,由内核直接访问的,不能由外设访问。 下面两篇博客不错哦: https://blog.csdn.net/zcshoucsdn/article/details/79176306 https://blog.csdn.net/q7727765/article/details/48207259 来源: https://www.cnblogs.com/happybirthdaytoyou/p/12291282.html

STM32学习笔记——点亮LED

隐身守侯 提交于 2020-02-09 19:08:18
STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本; 先简单的介绍一下stm32的GPIO; stm32的GPIO有多种模式:   1.输入浮空   2.输入上拉   3.输入下拉   4.模拟输入   5.开漏输出   6.推挽式输出   7.推挽式复用功能   8.开漏复用功能 stm32GPIO模式设置相关寄存器设置的介绍 stm32中文参考手册中对GPIO模式设置对应寄存器的详细介绍: 下图为开发板LED的接线图; 根据上面的电路图可知,将GPIOB_0,GPIOF_7和GPIOF_8设置为低电平时,LED将被点亮; 程序代码: LED.h 文件 1 #ifndef __LED_H 2 #define __LED_H 3 4 void GPIO_Init(void); 5 6 7 8 9 #endif stm32.h 文件 1 #ifndef __STM32_H 2 #define __STM32_H 3 4 //引脚寄存器定义 5 6 //GPIO对应寄存器起始地址 7 8 #define GPIOA 0x40010800 9 #define GPIOB 0x40010C00 10 #define GPIOC 0x40011000 11 #define GPIOD 0x40011400 12

STM32外部中断+TFTLCD显示

最后都变了- 提交于 2020-02-08 20:23:26
STM32外部中断简介 STM32的中断系统由嵌套中断向量控制器(Nested Vectored Interrupt Controller,NVIC)、外部中断/事件控制器(External Interrupt/Event Controller,EXTI)和各个外设中断控制器部分构成。 我们通过外部中断/事件线路映射。 将IO端口映射到16根外部中断线上,外部中断的GPIO的端口映射可由下图体现。 每一组相同的编号的GPIO都被映射到同一个外部中断/事件寄存器中。使用时Cortex-M3可以通过外部中断或者内部中断唤醒内核配置外部IO端口、RTC闹钟和USB唤醒事件来唤醒CPU。 我们在exti.c文件中进行 EXTIX_Init(void)函数编写,以及EXTI0_IRQHandler(void)进行IO口的中断服务程序。在EXTIX_Init(void)函数 中我们需要根据硬件的IO选择相应的中断线以及中断通道。为使用WK_UP、KEY0、KEY1三个按键分别连接到PA0、PE4、PE3三个IO口同时注意到KEY0、 KEY1低电平有效WK_UP按键高电平有效。因此我们在中断中使用中断线0中断线3中断线4(注意此时将WK_UP电阻上拉) void EXTIX_Init ( void ) { EXTI_InitTypeDef EXTI_InitStructure ; NVIC

stm32学习笔记

时光怂恿深爱的人放手 提交于 2020-02-08 11:53:06
文章目录 一、GPIO的控制 要求:软件仿真,根据高8位pin输入电平,低8位输出相应的电平。写出main.c代码。 编程思路: 方式1:直接读、写输入\输出寄存器。 代码: 方式2:通过位设置\清除寄存器 和 位清除寄存器控制。 BSRR位设置\清除寄存器 BRR位清除寄存器 代码: 方式3 位绑定 位绑定的定义: 个人理解 代码: 公式代码: 二、通信。 通信基本方式: 方式一:并行通信(多车道,多窗口)。 方式二:串行通信(单车道,单窗口)。 串行通信种类: 种类一:单工。 种类二:半双工。(对讲机) 种类三:全双工。 串行通信的标准: 标准1:UART 异步通信 异步通信协议: 异步通信应用场合: stm32f10x USART框图 stm32f10x波特率的计算 仿真代码 三、stm32库函数 一、GPIO的控制 要求:软件仿真,根据高8位pin输入电平,低8位输出相应的电平。写出main.c代码。 编程思路: 1、配置模式,P0.0~P0.7推挽输出,P0.8-P0.15浮空输入。 2、输入状态反映到对应引脚输出。 方式1:直接读、写输入\输出寄存器。 代码: #include "stm32f10x.h" int main(void) { //1、配置模式,P0.0~P0.7输出,P0.8-P0.15输入。 GPIOA->CRL = 0x33333333;/