stm32

STM32 串口

对着背影说爱祢 提交于 2020-01-17 03:23:28
学习笔记 一、STM32的APB1与APB2总线及挂载到该总线的设备 APB1总线上的设备 DAC PWR BKP bxCAN USB IIC1 IIC2 UART2~ 5 TIM2~ 7 RTC WWDG IWDG SPI2/I2S SPIS/I2S APB2总线上的设备 ADC1~ 3 UART1 SPI1 TIM1 TIM8 GPIOx EXTI AFIO 如果是APB1总线上的设备则使用RCC_APB1PeriphClockCmd() 函数使能时钟; 如果是APB2总线上的设备则使用RCC_APB2PeriphClockCmd() 函数使能时钟; 二、串口设置的一般步骤 串口时钟使能, GPIO 时钟使能 串口复位 GPIO 端口模式设置 串口参数初始化 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤) 使能串口 编写中断处理函数 对于复用功能的 IO,我们首先要使能 GPIO 时钟,然后使能复用功能时钟,同时要把 GPIO 模式设置为复用功能对应的模式 1.串口时钟使能。 RCC_APB2PeriphClockCmd(); 2.串口复位。 一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。复位的是在函数 USART_DeInit()中完成: void USART_DeInit(USART_TypeDef* USARTx);//串口复位 3

STM32的HAL库学习挖坑-SD卡读写(裸机程序)

只愿长相守 提交于 2020-01-17 02:28:13
继续挖坑,裸机跑8GB的SD卡读写。 PS:跑系统是不可能跑系统的,这辈子都不可能能跑系统的(滑稽) 实现功能: 1.成功识别SD卡,通过串口打印SD卡配置信息 2.读取SD卡数据,通过串口打印读取到的SD卡数据 3.写SD卡数据,通过串口打印写入后读取到的SD卡数据 由于没有JLINK,只能通过dfu烧录文件,所以先通过STM32CubeMX配置串口,异步收发,串口波特率为115200,其它选项默认。 设置SDIO相关数据, SDIO时钟频率=APB2/分频系数 ,由于MCU的时钟频率84Mhz,此时SDIO的时钟频率=84/84=1M 设置SDIO中断(好像没啥用,具体没测试过) 设置SDIO的管脚模式!!!设置SDIO的管脚模式!!!设置SDIO的管脚模式!!! 重要的事情要说三遍,由于硬件没有上拉电阻,导致调用函数SD_FindSCR失败,程序死机。 然后直接生成代码,在while(1)之前增加以下代码 /* USER CODE BEGIN 2 */ printf( "CardType is :%d\r\n", hsd.SdCard.CardType); printf( "CardCapacity is :%d\r\n", hsd.SdCard.BlockNbr); printf( "CardBlockSize is :%d\r\n", hsd.SdCard

stm32 串口发送字符串第一个字节丢失、复位发送00

 ̄綄美尐妖づ 提交于 2020-01-16 03:50:44
1.stm32 串口发送字符串第一个字节丢失 这个问题如下解决: while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//防止一个字节丢失 USART_SendData(USART1,data); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); 2.stm32复位串口发送00,APB1与APB2混淆了,区分好。 来源: CSDN 作者: 嵌入式阿萌 链接: https://blog.csdn.net/weixin_41613969/article/details/103995694

yocto编译bug1)

≡放荡痞女 提交于 2020-01-14 19:42:36
ERROR: gtk+3-3.22.30-r0 do_compile: oe_runmake failed 引用文本 ERROR: gtk+3-3.22.30-r0 do_compile: oe_runmake failed ERROR: gtk+3-3.22.30-r0 do_compile: Function failed: do_compile (log file is located at /home/cy/stm32/yocto/build-openstlinuxweston-stm32mp1/tmp-glibc/work/cortexa7t2hf-neon-vfpv4-openstlinux_weston-linux-gnueabi/gtk+3/3.22.30-r0/temp/log.do_compile.32594) ERROR: Logfile of failure stored in: /home/cy/stm32/yocto/build-openstlinuxweston-stm32mp1/tmp-glibc/work/cortexa7t2hf-neon-vfpv4-openstlinux_weston-linux-gnueabi/gtk+3/3.22.30-r0/temp/log.do_compile.32594 Log data follows: |

PCB学习笔记(一)STM32晶振

余生颓废 提交于 2020-01-14 18:09:26
PCB学习笔记(一)STM32晶振画法 STM32晶振画法原理图 PCB晶振 STM32晶振画法原理图 话不多说,先上图,如果只是想画个PCB的伙伴到这里就可以不用看了。 我们知道,STM32有5个时钟源,有高速内部时钟(HSI)和低速内部时钟(LSI),还有高速外部时钟(HSE)和低速外部时钟(LSE),而这里的外部高速时钟HSI就是我们图中的Y1,8MHz的晶振,外部低速时钟则是图中的Y2,32.768KHz的晶振,只有通过8MHz的晶振才可以最终达到72MHz,而32.768KHz正好是2的15次方。 四个电容都是22pF,不要随意更改,会出不少问题。外部高速晶振里面电阻1MΩ,也可以不加。 PCB晶振 晶振内部存在石英晶体,受到外部撞击或跌落时易造成石英晶体断裂破损,进而造成晶振不起振,所以在设计电路时要考虑晶振的可靠安装,其位置靠近CPU 芯片优先放置,远离板边。 在手工焊接或机器焊接时,要注意焊接温度。晶振对温度比较敏感,焊接时温度不能过高,并且加热时间尽量短。 耦合电容应尽量靠近晶振的电源引脚,位置摆放顺序:按电源流入方向,依容值从大到小依次摆放,容值最小的电容最靠近电源引脚,形成Π型滤波。 晶振的外壳必须接地,可以晶振的向外辐射,也可以屏蔽外来信号对晶振的干扰。 晶振下面不要布线,保证完全铺地,同时在晶振的300mil范围内不要布线,这样可以防止晶振干扰其他布线

How to properly initialize I2C stm32?

╄→гoц情女王★ 提交于 2020-01-14 15:49:10
问题 I want to get data from ADXL345 accelerometer,but seems that I incorrectly connect it. SCL- PC6(with 10k resistor) SDA- PC7(with 10k resistor) SDO- GND CS - VCC GND - GND 3.3v - VCC Here is my code to initalize: void I2CG_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure; RCC_AHBPeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // I2CG clock enable RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2CG, ENABLE); RCC

STM32的RTC学习笔记

一个人想着一个人 提交于 2020-01-14 14:36:47
STM32的RTC学习笔记 Mcu:STM32F103RBT6 1、RTC简介 RTC(Real Time Clock)实时时钟,是STM32片内的一个外设,这个外设使用起来跟普通定时器有一点区别,他是独立的一个定时器,并且能产生两个中断,秒中断和闹钟中断,他的时钟源可以由外部或内部驱动,由使用者选择,一些教程说RTC使用内部低速时钟(LSI)的时钟频率不准,可能跑久了以后就会出现误差。 2、RTC配置流程 1、使能RTC外设时钟 RCC_APB1PeriphClockCmd ( RCC_APB1Periph_PWR , ENABLE ) ; //RTC时钟使能(电源) RCC_APB1PeriphClockCmd ( RCC_APB1Periph_BKP , ENABLE ) ; //RTC时钟使能(备份) 2、使能备份寄存器访问 PWR_BackupAccessCmd ( ENABLE ) ; //使能备份寄存器访问 开启后才能对备份寄存器进行访问,后期可以讲数据写进备份寄存器里,以防掉电数据丢失。 3、初始化备份寄存器 BKP_DeInit ( ) ; //初始化备份配置 4、时钟源选择与使能 RCC_LSICmd ( ENABLE ) ; //使能内部低速时钟 while ( RCC_GetFlagStatus ( RCC_FLAG_LSIRDY ) == 0 ) ; /

STM32串口usart

为君一笑 提交于 2020-01-14 04:26:10
STM32 串口 UART串口通信协议是嵌入式开发的常用通信协议(UART、I2C、SPI等)之一,全称叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。 异步串行通讯 异步通信是指发送和接收端使用的是各自的时钟,并且它是一种不连续的传输通信方式,一次通信只能传输一个字符数据(字符帧)。 异步串行同信帧 :将一个字节数据加上起始位、校验位以及停止位构成字符帧。由于异步通信没有同步时钟,所以接收端要时刻处于接收状态。 起始位 :在没有数据传送时(空闲状态),此时通信线上为逻辑“1”。当发送端要发送一个数据时,首先发送一个逻辑“0”,这个低电平就是帧格式的起始位。作用是告诉接收端要开始发送一帧数据。接收端检测到这个低电平之后,就准备接收数据信号。 数据位 :在起始位之后,发送端发出的就是数据位,数据位的位数没有严格限制(5-8位都可以)。低位在前,高位在后。由低位向高位逐位发送。 校验位 :数据位发送完成之后,可以发送以为用来校验数据在传送过程中是否出错。校验位是收发双方预先约定好的有限制差错检验的方式之一(可不用)。 停止位 :字符帧格式的最后部分是停止位,逻辑“1”有效,它的占位有1/2位、1位或者2位。停止位表示传送一帧信息的结束,也作为发送下一帧数据信息做准备。 异步串行通信特点:不需要同步时钟,通信实现简单

STM32串口之环形队列接收数据

梦想与她 提交于 2020-01-14 03:19:09
文章目录 废话说在前面 代码实现 环形队列数据结构 写一字节数据到队列 判断队列是否写满 读一字节的数据 判断队列是否为空 写多个字节到队列 从队列中读出多个字节 到STM32上测试 废话说在前面 码代码的应该学数据结构都学过队列。环形队列是队列的一种特殊形式,应用挺广泛的。 因为有太多文章关于这方面的内容,理论知识可以看别人的,下面写得挺好的: STM32进阶之串口环形缓冲区实现 代码实现 环形队列数据结构 typedef struct ringBuff { unsigned int in ; //写入的位置 unsigned int out ; //读出的位置 unsigned char buffer [ RING_BUFF_SIZE ] ; //数据域 } stRingBuff ; 写一字节数据到队列 /** - @brief: 寫一字節的數據到環形隊列 - @param[in]: None - @retval[out]: None - @note: - @author: AresXu - @version: v1.0.0 */ char WriteOneByteToRingBuffer ( stRingBuff * ringBuf , char data ) { if ( ringBuf == NULL ) { printf ( "pointer is null\r\n"

STM32F103 microcontroller CAN messages

痞子三分冷 提交于 2020-01-13 20:31:50
问题 I am wondering if anyone is familiar with any STM32f10x micro-controllers? If so, I am having some problems configuring a CAN driver. I can run the demo code, which is set to a loop_Back mode, but I cannot get Normal_Mode to work. I read through all the data sheets, and everything is configured correctly except the INAK in the CAN_MSR register never resets to 0. I can provide more detail if needed, but first I need to know if there is someone who has worked with a STM32F103 microcontroller