stm32

STM32 HAL rx interrupt can't get bytes correctly

江枫思渺然 提交于 2020-02-05 06:15:08
问题 Hi guys I am trying to make serial rx interrupt using stm32 HAL library and I got error what I dont know. It is really simple program. PC gives bytes to stm32 board and stm32 will take those bytes using rx interrupt routine. Problem is when i send over 4 bytes ,such as "12345", stm32 board only got 4 bytes and last one byte(5) is gone somewhere. Here is picture for better understanding. Here is my code in HAL_UART_RxCpltCallback routine: HAL_UART_Transmit(&huart4, &receive1, 1, 1000); HAL

STM32 HAL rx interrupt can't get bytes correctly

不羁的心 提交于 2020-02-05 06:15:05
问题 Hi guys I am trying to make serial rx interrupt using stm32 HAL library and I got error what I dont know. It is really simple program. PC gives bytes to stm32 board and stm32 will take those bytes using rx interrupt routine. Problem is when i send over 4 bytes ,such as "12345", stm32 board only got 4 bytes and last one byte(5) is gone somewhere. Here is picture for better understanding. Here is my code in HAL_UART_RxCpltCallback routine: HAL_UART_Transmit(&huart4, &receive1, 1, 1000); HAL

STM32架构及最小系统

空扰寡人 提交于 2020-02-05 01:11:44
1. STM32F4系列使用ARM架构的ARMV7-ME架构,属于Cotex-M4系列,支持浮点运算单元FPU和DSP指令。 2. 与ARM Cotex-A8是支持MMU的处理器相比,Cotex-M4不能支持带虚拟内存的操作系统比如Linux,但是M4支持MPU即内存保护单元,一般用于对UcosII系统代码的保护。另外,M4具备功耗更低的优势。 3. STM32最小系统包括: (1)供电电路 (2)复位 (3)时钟:外部晶振(2个) (4)Boot启动模式选择 (5)下载电路(串口/JTAG/SWD) (6)RTC电路 来源: CSDN 作者: 川渝小神丢 链接: https://blog.csdn.net/fengel_cs/article/details/104173149

stm32中断概览

落花浮王杯 提交于 2020-02-04 22:12:21
STM32 中断非常强大,每个外设都可以产生中断。 异常类型 F429 在内核水平上搭载了一个异常响应系统, 支持为数众多的系统异常和外部中断。其中系统异常有 10 个,外部中断有 91 个。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。 NVIC NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。 中断配置 在配置中断的时候我们一般只用 ISER、ICER 和 IP 这三个寄存器,ISER 用来使能中断,ICER 用来失能中断,IP 用来设置中断优先级。 中断优先级 在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx(在 F429 中,x=0…90) 在 F429 中,只使用了高 4bit,如下所示 用于表达优先级的这 4bit,又被分组成抢占优先级和子优先级。如果有多个中断同时响应,抢占优先级高的就会 抢占 抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级。如果抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高。 优先级分组 优先级的分组由内核外设 SCB 的应用程序中断及复位控制寄存器 AIRCR 的PRIGROUP[10:8]位决定,F429 分为了 5 组,具体如下:主优先级=抢占优先级 设置优先级分组可调用库函数 NVIC

CubeMX-generated USB HID device sends wrong data when both endpoint and PMA address are changed

可紊 提交于 2020-02-04 03:47:26
问题 I'm debugging a problem with a composite device that I'm creating, and have recreated the issue in freshly-CubeMX-generated HID-only code, to make it easier to resolve. I've added small amount of code to main() to let me send USB HID mouse-clicks, and flash an LED, when the blue-button is pressed. ... uint8_t click_report[CLICK_REPORT_SIZE] = {0}; extern USBD_HandleTypeDef hUsbDeviceFS; ... int main(void) { ... while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(HAL_GPIO_ReadPin

STM32使用SRAM扩展内存

帅比萌擦擦* 提交于 2020-02-04 03:46:39
目录 一、SRAM介绍 二、STM32F103系列的FSMC模块 三、初始化配置及数据访问 四、使全局变量定义在外部SRAM中的方法 五、参考文章及资料 一、SRAM介绍 SRAM( S tatic R andom- A ccess M emory)即静态随机存取存储器,所谓“静态”是指这种存储器只要保持通电,里面存储的数据就可以一直保持,但是掉电之后就会丢失。与DRAM(动态随机存取存储器)相比它不需要周期性的刷新里面的数据,操作简单,速度更快,但是更加的昂贵,集成度不如DRAM高。 本文使用的SRAM型号为 IS62WV51216,是 ISSI(Integrated Silicon Solution, Inc)公司生产的一颗16位宽 1M字节容量的CMOS静态内存芯片。 SRAM芯片(IS62WV51216) IS62WV51216引脚图 IS62WV51216引脚描述 地址线A0到A18寻址空间是512K,因为数据宽度为16位即两个字节,所以512K*2Byte = 1MB容量。LB和UB的功能是控制高低字节的数据有效性,真值表如下: 真值表 二、STM32F103系列的FSMC模块 FSMC(Flexible Static Memory Controller)即可变静态存储控制器,通俗的来说是STM32的一个强大的总线控制模块,它将AHB传输信号转换到适当的外部设备协议

STM32简单的PID控制器代码

↘锁芯ラ 提交于 2020-02-04 02:36:22
/************************************************************************** 函数功能:位置式PID控制器 入口参数:编码器测量位置信息,目标位置 返回 值:电机PWM 根据位置式离散PID公式 pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)] e(k)代表本次偏差 e(k-1)代表上一次的偏差 ∑e(k)代表e(k)以及之前的偏差的累积和;其中k为1,2,,k; pwm代表输出 **************************************************************************/ int Position_PID ( int Encoder , int Target ) { float Position_KP = 80 , Position_KI = 0.1 , Position_KD = 500 ; static float Bias , Pwm , Integral_bias , Last_Bias ; Bias = Encoder - Target ; //计算偏差 Integral_bias + = Bias ; //求出偏差的积分 Pwm = Position_KP * Bias + Position_KI *

STM32入门之电路基础

◇◆丶佛笑我妖孽 提交于 2020-02-04 01:10:19
描述了一些简单的电路基础知识 模拟电路转数字电路进行采样曲线 电路的基本元素 电路图中的电源线表达符号 数字电路电平表达 电平 推挽输出(带负载输出高电平) 推挽输出(吸收电流低电平) 上下拉电阻 拉的是某一个接口,0或者1的电平状态 平时高电平,复位时低电平,直接导通接地为0。 下拉电阻保持低电平,唤醒后触发高电平为1,忽略低电平,因为电路都是优先导通电阻最小的通路。 来源: CSDN 作者: weixin_40227845 链接: https://blog.csdn.net/weixin_40227845/article/details/104161400

stm32库函数编程位操作总结

☆樱花仙子☆ 提交于 2020-02-03 18:04:28
所谓位运算,就是对一个比特(Bit)位进行操作。在《数据在内存中的存储》一节中讲到,比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了。 C语言提供了六种运算符 运算符 & | ^ ~ << >> 说明 按位与 按位或 按位异或 取反 左移 右移 左移运算(<<) 左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0。 右移运算(>>) 右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。 如果数据的最高位是 0,那么就补 0; 如果最高位是 1,那么就补 1。 stm32库函数编程常用的位操作 1 )把变量的某位清零。 ```c 1 //定义一个变量 a = 1001 1111 b (二进制数) 2 unsigned char a = 0x9f ; 3 4 //对 bit2 清零 5 6 a & = ~ ( 1 << 2 ) ; 7 8 //括号中的 1 左移两位,(1<<2)得二进制数:0000 0100 b 9 //按位取反,~(1<<2)得 1111 1011 b 10 //假如 a 中原来的值为二进制数: a = 1001 1111 b 11 //所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 1011 b), 12 //经过运算后,a

STM32 分析启动代码

折月煮酒 提交于 2020-02-03 11:02:25
0x08000000 0408 DCW 0x0408 0x08000002 2000 DCW 0x2000 0x08000004 0059 DCW 0x0059 0x08000006 0800 DCW 0x0800 0x08000008 00AF DCW 0x00AF 0x0800000A 0800 DCW 0x0800 0x0800000C 00A7 DCW 0x00A7 0x0800000E 0800 DCW 0x0800 0x08000010 00AB DCW 0x00AB 0x08000012 0800 DCW 0x0800 0x08000014 00A1 DCW 0x00A1 0x08000016 0800 DCW 0x0800 0x08000018 00C9 DCW 0x00C9 0x0800001A 0800 DCW 0x0800 0x0800001C 0000 DCW 0x0000 0x0800001E 0000 DCW 0x0000 0x08000020 0000 DCW 0x0000 0x08000022 0000 DCW 0x0000 0x08000024 0000 DCW 0x0000 0x08000026 0000 DCW 0x0000 0x08000028 0000 DCW 0x0000 0x0800002A 0000 DCW 0x0000