程序内有详细的讲解文档,很好的学习资料,欢迎大家下载学习
2023-02-14 09:49:34 3.07MB STM32 UART串口2 Printf输出 scanf输入
1
采用STM32F429IGT6单片机,KeilMDK5.32版本 使用SysTick系统滴答定时器进行延时 LED_R、LED_G、LED_B分别为PH10,PH11,PH12 Key1为PA0,Key2为PC13 KEIL5下载配置有FLASH与SRAM 用SPI5与Flash芯片通信(W25Q256JV),使用了DMA进行收发数据,SPI是同步通信,同时收发数据(其实仅与发TX同步,作为主器件,Tx产生波特率时钟SCK信号) 利用可变参数宏实现printf与scanf 定义了Flash输入输出结构体,利用了共用体 发送与接收缓冲区大小均为一个扇区大小4096B NSS(CS)采用软件控制,因为Flash芯片每发送玩一个指令都要把CS拉高。 注意点:因为TX产生SCK时钟,故需要TX的DMA优先级要比RX的优先级低,本次TX和RX的DMA使用的是一个DMA(DMA2),因为当收发一个数据后,TX和RX的DMA出现仲裁,TX需要发下一个数据,RX需要接收当前数据,为了防止一直发数据,故RX的DMA优先级需要比TX的高开启RX的DMA传输完成中断,在该中断中将CS拉高,结束通讯。
2022-12-23 09:59:58 616KB stm32 c语言
1
采用STM32F429IGT6单片机,KeilMDK5.32版本 使用SysTick系统滴答定时器进行延时 LED_R、LED_G、LED_B分别为PH10,PH11,PH12 Key1为PA0,Key2为PC13 KEIL5下载配置有FLASH与SRAM 收发共用一个缓冲区 I2C使用DMA与AT24C02通信,Tx中,利用DMA传输数据,但是起始位,设备地址,读写地址采用的是阻塞式发送,数据则是采用DMA传输;注意点:采用DMA发送应该等到BTF(发送寄存器空,移位寄存器也为空)事件后设置停止位,不可以在DMA传输完成中断中设置停止位,因为此时正在发送最后一个字节,故开启BTF中断(I2C_EV),在该中断服务函数中发送停止位并关闭I2C的DMA传输使能。 Rx中,利用DMA传输数据,但是起始位,设备地址,AT24C02写入地址采用的是阻塞式发送,数据则是采用DMA传输;注意点:在DMA传输完成中断中发送停止位,并关闭I2C的DMA传输使能,I2C主接收,写读转换中再次发送起始位前,第一次发送设备地址字节后,应检测BTF 仿printf写入发送缓冲区前,应检查上一次通信是否结束
2022-12-06 22:29:30 619KB stm32 c语言
1
程序内有详细的讲解文档,很好的学习资料,欢迎大家下载学习
2021-12-05 21:17:01 3.2MB STM32 UART串口1 Printf输出 scanf输入
1
cin和scanf输入错误的处理:在 cin是C++中常用的标准输入函数,但是在调用此函数时也常常会遇到一些问,如对整型数组输入字符后就会发生无法用输入推出循环的情况,这需要错误处理机制
2021-10-17 16:36:02 18KB cin scanf 循环输入 错误处理
1
输入一个数字,求出它的阶乘
2021-08-27 19:07:54 207B while循环
1