STM32学习笔记-串口

所用的STM32主要有3个串口,3个串口的物理位置如图中所示.....

串口的驱动编写流程.....待续.......

stm32串口1和串口3数据互通,经测试同时发256字节不丢包 void usart3_init(u32 bound) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIOBʱÖÓ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //´®¿Ú3ʱÖÓʹÄÜ USART_DeInit(USART3); //¸´Î»´®¿Ú3 //USART3_TX PB10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö GPIO_Init(GPIOB, &GPIO;_InitStructure); //³õʼ»¯PB10 //USART3_RX PB11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë GPIO_Init(GPIOB, &GPIO;_InitStructure); //³õʼ»¯PB11 USART_InitStructure.USART_BaudRate = bound;//²¨ÌØÂÊÒ»°ãÉèÖÃΪ9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæÅ¼Ð£Ñéλ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ÊÕ·¢Ä£Ê½ USART_Init(USART3, &USART;_InitStructure); //³õʼ»¯´®¿Ú 3 USART_Cmd(USART3, ENABLE); //ʹÄÜ´®¿Ú //ʹÄܽÓÊÕÖÐ¶Ï USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿ªÆôÖÐ¶Ï //ÉèÖÃÖжÏÓÅÏȼ¶ NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//ÇÀÕ¼ÓÅÏȼ¶3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //×ÓÓÅÏȼ¶3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀʹÄÜ NVIC_Init(&NVIC;_InitStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷ TIM4_Int_Init(1000-1,7200-1); //10msÖÐ¶Ï USART3_RX_STA=0; //ÇåÁã TIM_Cmd(TIM4,DISABLE); //¹Ø±Õ¶¨Ê±Æ÷7 } //´®¿Ú3,printf º¯Êý //È·±£Ò»´Î·¢ËÍÊý¾Ý²»³¬¹ýUSART3_MAX_SEND_LEN×Ö½Ú void u3_printf(char* fmt,...) { u16 i,j; va_list ap; va_start(ap,fmt); vsprintf((char*)USART3_TX_BUF,fmt,ap); va_end(ap); i=strlen((const char*)USART3_TX_BUF); //´Ë´Î·¢ËÍÊý¾ÝµÄ³¤¶È for(j=0;j<i;j++) //Ñ­»··¢ËÍÊý¾Ý { while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï USART_SendData(USART3,USART3_TX_BUF[j]); } }
### STM32 使用 OLED 显示屏的学习笔记与教程 #### 关于 STM32 和 OLED 的基础知识 STM32 是一种基于 ARM Cortex-M 架构的微控制器系列,广泛应用于嵌入式开发领域。OLED(有机发光二极管)显示屏因其高对比度、低功耗等特点,在许多项目中被用作显示设备。为了实现 STM32 对 OLED 屏幕的支持,通常需要完成硬件连接以及软件驱动程序的设计。 以下是有关 STM32 驱动 OLED 显示屏的一些关键知识点: #### 硬件连接方式 在 STM32 中,OLED 通常通过 IIC(I²C)、SPI 或 UART 接口进行通信。其中最常见的是 IIC 协议,因为它只需要两根线即可完成数据传输,简化了硬件设计[^1]。具体的硬件连接方法可以参考实际使用的模块手册或相关文档。 #### 软件初始化过程 对于 STM32 来说,使用 OLED 显示屏的第一步是对屏幕进行初始化配置。这一步骤包括设置通信协议参数、定义屏幕分辨率以及其他必要的寄存器操作。以下是一个简单的初始化代码示例: ```c #include "stm32f10x.h" #include "OLED.h" int main() { SystemInit(); // 初始化系统时钟 OLED_Init(); // 初始化 OLED 模块 while (1) { OLED_ShowString(2, 1, "Hello"); // 在第 2 行第 1 列显示字符串 "Hello"[^3] } } ``` 上述代码展示了如何调用 `OLED_Init()` 函数来启动 OLED 并利用 `OLED_ShowString` 方法向屏幕上写入文字信息。 #### 数据打印至 OLED 屏幕 如果希望将来自串口的数据实时展示到 OLED 上,则需编写额外的功能逻辑处理接收到的信息并将其传递给 OLED 控制接口。例如,可以通过中断服务例程捕获串口输入流,并逐字符绘制到指定位置上[^2]。 #### 进阶功能扩展 除了基本的文字输出外,还可以尝试实现更复杂的图形化界面效果,比如加载位图图像或者支持多语言字体渲染等功能。这些都需要深入理解底层库文件结构及其 API 定义说明。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxiang_8888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值