STM32F103C8T6+IIC OLED 0.96简单使用带串口调试输入出工程模板

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F103C8T6+IIC OLED 0.96简单使用带串口调试输入出工程模板相关的知识,希望对你有一定的参考价值。

STM32F103C8T6+IIC OLED0.96简单使用带串口调试输入出工程模板


  • 这是一个基于别人开源代码基础上建立的的一个模板工程,该工程模板界面简洁,文件架构工整,如果开发类似的基础工程项目可以,直接拿来作为模板套用,完整工程会在末尾分享出来。

  • 串口输出(工程模板默认没有主动打印调试信息出来,main.c第31行

  • 串口启用了将接收到的数据原样发送出来

  • 工程概览

接线说明

  • IIC 0.96" OLED屏幕
PA1----SCL
PA2----SDA
  • 串口1

工程已经重映射好了,可以直接使用printf函数来串口调试打印输出信息

PA9----TX
PA10----RX

主程序代码

#include "main.h"

#include "bsp_delay.h"
#include "bsp_usart.h"
#include "bsp_sys.h"

#include "bsp_led.h"
#include "bsp_exti.h"
#include "bsp_timer.h"
#include "bsp_adc.h"
#include "bsp_key.h"

#include "oled.h"

int main()

	u8 oledStr[16]=0;
	u8 count=0;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	BspUsartInit(115200);
	DelayInit();	
	OLED_Init();

	while(1)
	
		count ++;
		sprintf((char*)oledStr,"Test : %3d     ",(u8)count);//将数据存进oledStr数组
		OLED_ShowString(10,28,oledStr,16,1);//oled显示数组
		OLED_Refresh();
		DelayMs(100);
	//	printf("%s \\n",oledStr);//串口打印
	

  • bsp_usart.c
#include "bsp_usart.h"
#include "stdio.h"

//接收到数据后,将数据返回发送
void DebugUsartMain()

    u8 res;
    res = USART_ReceiveData(USART1);
    USART_SendData(USART1,res);


void USART1_IRQHandler(void)

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    
        DebugUsartMain();
        EXTI_ClearITPendingBit(USART_IT_RXNE);
    


//重定义fputc函数
int fputc(int ch, FILE *f)

    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
    USART1->DR = (u8) ch;
    return ch;


void BspUsartInit(u32 bound)

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|
                           RCC_APB2Periph_GPIOA,  ENABLE);	//使能USART1,GPIOA时钟
    //GPIO端口设置
    
        GPIO_InitTypeDef GPIO_InitStructure;
        //USART1_TX   GPIOA.9
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        //USART1_RX	  GPIOA.10初始化
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    //Usart1 NVIC 配置
    
        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化NVIC寄存器
    
    //USART 初始化设置
    
        USART_InitTypeDef USART_InitStructure;
        USART_InitStructure.USART_BaudRate = bound;//串口波特率
        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(USART1, &USART_InitStructure); //初始化串口1
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
        USART_Cmd(USART1, ENABLE);                    //使能串口1
    


程序源码

链接:https://pan.baidu.com/s/1hn174EJCxUJ6zuZCpo-M0Q 
提取码:mgmd
阅读世界,共赴山海 423全民读书节,邀你共读

以上是关于STM32F103C8T6+IIC OLED 0.96简单使用带串口调试输入出工程模板的主要内容,如果未能解决你的问题,请参考以下文章

STM32F103C8T6在Arduino框架下驱动ssd1306 0.96“ IIC OLED显示

stm32f103c8t6 usart1不工作

STM32F103C8T6在Arduino框架下驱动SH1106 1.3“ IIC OLED显示

会stm32f429好学stm32f103吗

stm32f407H库和stm32f103H库有区别吗

STM32F103C8T6 + 0.96“ I2C OLED显示3D_Cube