精华内容
下载资源
问答
  • 串口调试程序代码

    2020-11-12 23:01:08
    为此调试编写的测试程序功能是通过串口输出一个字符串“abcdefg”,经过串口初始化程序运行,将PC与ARM板串口互连接线连接,通过此软件进行串口监听,接收到了正常的字符串“abcdefg”,即表明串口工作正常。...
  • 又放松了一天,看了一整天的电影啊:《2012世界末日》,《异次元骇客》,《社交网络》还有几个有关IT行业的纪录片:《奔跑吧代码|code rush》《java 4-ever》预告,连续看这些比较费脑的电影感觉是很奇妙的,特别是...
    又放松了一天,看了一整天的电影啊:《2012世界末日》,《异次元骇客》,《社交网络》还有几个有关IT行业的纪录片:《奔跑吧代码|code rush》《java 4-ever》预告,连续看这些比较费脑的电影感觉是很奇妙的,特别是看完《社交网络》之后,感觉马克.扎克伯格真的很帅有木有,思维根本跟不上人家的语速有没有,更别说看电影来练习英语听力了,有些人真的是有着方面的天赋,不得不承认,但是每个人都有自己的撸,自己认真走好自己的撸也是不错的,哈。。。烧了一天脑,看完后有些迷茫,总感觉花费一天一天的时间来看电影不是一个好的生活方式,但是不知道现在应该做一些什么,所以是时候分析一下从这次开学之后自己的状态了。
    首先:这个学期我的目标是什么?
    1找到可以让自己生存下来的并且是有关编程方面的事情做。2确定一下自己到底考不考研究生。2如果确定不考研,在大三学年之后,掌握一门技能,并能依靠这个来支撑自己的基本生活。
    到底是考研还是什么吗?考研的话我现在是不是就应该开始准备了。问题来了:1我想不想考研;2我适合不适合考研;3我对考研了解多少;4我有没有一起考研的朋友;5我考研的话应该考哪个专业的;6考研考哪个学校;7考研的目标是就业还是继续深造;8考研能得到什么。
    1.不想;2.感觉自己不适合,对理论方面不是很感兴趣;3不是很了解,目前的印象是可以得到一个硕士文凭,毕业以后相对本科生来好找工作,且工资刚开始会高一些,但自己算的话,本科毕业找工作工作三年可以积累不少经验,之后考研可能会比较好,而且在今天看完《code rush》以后感觉IT行业确实是吃青春饭的,能早些积累经验还是早些积累把,退休以后没事还是可以继续高研究的吗,现在就是想早些实现经济独立,25岁之后可以出国去转一转;4如果考研的话我会选择考计算机软件方面的研究生,目前是没有找到志趣相投的伙伴;5计算机软件;6浙大,西北;7就业;8文凭,对自己的认识会高一些,认识到一些非常棒的朋友。
    现在分析完了,自己是不考研了,感觉好了不少。明天开始code,基本上好看的电影都看了一遍,感觉脑子都不够用了,一天涨涨的,若爆了,哈哈。。。
    下面把今天写的code贴上(…………)
    
    #include "reg51.h"
    
    typedef unsigned char u8;
    typedef unsigned int u16;
    
    void Usart() interrupt 4
    {
        u8 ReceiveData;
    
        ReceiveData=SBUF;
        RI=0;
        SBUF=ReceiveData;
        while(!TI); //
        TI=0;   
    }
    
    void UsartInit()
    {
        TMOD|=0X20;
        PCON|=0X80;
        SCON=0X50;//
        TH1=0XF3;
        TL1=0XF3;
        TR1=1;
        EA=1;
        ES=1;
        TR1=1;  
    }
    
    void main()
    {
        UsartInit();
        while(1);
    }

    这个 代码主要是对串口的初始化,然后有个中断子程序,每次向串口发送一个数据,串口就会把这个消息通过这个串口再次发送出去。
    今天就到这里把,第二天。。。中间断了一天,慢慢把这个习惯养成把。恒。。。

    转载于:https://www.cnblogs.com/StivenYang/p/8441338.html

    展开全文
  • 内容包括硬件初始化(汇编),时钟、内存、mmu、串口、led初始化(c语言),代码搬移是从垫脚石搬移到内存,不含从nandflash搬移到内存,功能:点亮led,使用printf+scanf函数调用串口程序打印输出。
  • 编程时需要用到的固件库函数三、串口点灯代码实现1.USART .C文件2.USART.H文件3.MAIN.C四、串口收发程序代码实现1.USART .C文件2.USART.H文件3.MAIN.C 一、串口通信协议简介 物理层:规定通讯系统中具有机械、电子...


    一、串口通信协议简介

    物理层:规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬件部分。
    协议层:协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分。

    1.RS232标准

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.USB转串口

    在这里插入图片描述

    3.原生的串口到串口

    在这里插入图片描述

    二、初始化结构体解

    1.USART初始化结构体

    在这里插入图片描述

    2.同步时钟初始化结构体

    在这里插入图片描述

    3.编程时需要用到的固件库函数

    在这里插入图片描述
    在这里插入图片描述

    三、串口点灯代码实现

    1.USART .C文件

    #include "bsp_usart.h"
    
    
    void USART_Config(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	USART_InitTypeDef USART_InitStructure;
    
    	// 打开串口GPIO的时钟
    	DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
    	
    	// 打开串口外设的时钟
    	DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
    
    	// 将USART Tx的GPIO配置为推挽复用模式
    	GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
    
      // 将USART Rx的GPIO配置为浮空输入模式
    	GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    	GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
    	
    	// 配置串口的工作参数
    	// 配置波特率
    	USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
    	// 配置 针数据字长
    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    	// 配置停止位
    	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(DEBUG_USARTx, &USART_InitStructure);
    	
    //	// 串口中断优先级配置
    //	NVIC_Configuration();
    //	
    //	// 使能串口接收中断
    //	USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);	
    	
    	// 使能串口
    	USART_Cmd(DEBUG_USARTx, ENABLE);	    
    }
    
    /* 发送一个字节 */
    void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data)
    {
    	USART_SendData(pUSARTx, data);
    	while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET );
    }
    
    /* 发送两个字节的数据 */
    void Usart_SendHalfWord(USART_TypeDef* pUSARTx, uint16_t data)
    {
    	uint8_t temp_h,temp_l;
    	
    	temp_h = (data&0xff00) >> 8 ;
    	temp_l = data&0xff;
    	
    	USART_SendData(pUSARTx, temp_h);
    	while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET );
    	
    	USART_SendData(pUSARTx, temp_l);
    	while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET );
    }
    
    /* 发送8位数据的数组 */
    void Usart_SendArray(USART_TypeDef* pUSARTx, uint8_t *array,uint8_t num)
    {
    	uint8_t i;
    	for( i=0; i<num; i++ )
      {
    		Usart_SendByte(pUSARTx, array[i]);
    	}
    	while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET );
    }
    
    /* 发送字符串 */
    void Usart_SendStr(USART_TypeDef* pUSARTx, uint8_t *str)
    {
    	uint8_t i=0;
    	do
      {
    		Usart_SendByte(pUSARTx, *(str+i));
    		i++;
    	}while(*(str+i) != '\0');
    	while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET );
    }
    
    ///重定向c库函数printf到串口,重定向后可使用printf函数
    int fputc(int ch, FILE *f)
    {
    		/* 发送一个字节数据到串口 */
    		USART_SendData(DEBUG_USARTx, (uint8_t) ch);
    		
    		/* 等待发送完毕 */
    		while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);		
    	
    		return (ch);
    }
    
    ///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
    int fgetc(FILE *f)
    {
    		/* 等待串口输入数据 */
    		while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);
    
    		return (int)USART_ReceiveData(DEBUG_USARTx);
    }
    
    

    2.USART.H文件

    #ifndef __BSP_USART_H
    #define __BSP_USART_H
    
    #include "stm32f10x.h"
    #include <stdio.h>
    
    #define DEBUG_USART1     1
    #define DEBUG_USART2     0
    #define DEBUG_USART3     0
    #define DEBUG_USART4     0
    #define DEBUG_USART5     0
    
    #if DEBUG_USART1
    // 串口1-USART1
    #define  DEBUG_USARTx                   USART1
    #define  DEBUG_USART_CLK                RCC_APB2Periph_USART1
    #define  DEBUG_USART_APBxClkCmd         RCC_APB2PeriphClockCmd
    #define  DEBUG_USART_BAUDRATE           115200
    
    // USART GPIO 引脚宏定义
    #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
    #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
        
    #define  DEBUG_USART_TX_GPIO_PORT       GPIOA   
    #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_9
    #define  DEBUG_USART_RX_GPIO_PORT       GPIOA
    #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_10
    
    #define  DEBUG_USART_IRQ                USART1_IRQn
    #define  DEBUG_USART_IRQHandler         USART1_IRQHandler
    
    #elif DEBUG_USART2
    //串口2-USART2
    #define  DEBUG_USARTx                   USART2
    #define  DEBUG_USART_CLK                RCC_APB1Periph_USART2
    #define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
    #define  DEBUG_USART_BAUDRATE           115200
    
    // USART GPIO 引脚宏定义
    #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
    #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
        
    #define  DEBUG_USART_TX_GPIO_PORT       GPIOA   
    #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_2
    #define  DEBUG_USART_RX_GPIO_PORT       GPIOA
    #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_3
    
    #define  DEBUG_USART_IRQ                USART2_IRQn
    #define  DEBUG_USART_IRQHandler         USART2_IRQHandler
    
    #elif DEBUG_USART3
    //串口3-USART3
    #define  DEBUG_USARTx                   USART3
    #define  DEBUG_USART_CLK                RCC_APB1Periph_USART3
    #define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
    #define  DEBUG_USART_BAUDRATE           115200
    
    // USART GPIO 引脚宏定义
    #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOB)
    #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
        
    #define  DEBUG_USART_TX_GPIO_PORT       GPIOB   
    #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_10
    #define  DEBUG_USART_RX_GPIO_PORT       GPIOB
    #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_11
    
    #define  DEBUG_USART_IRQ                USART3_IRQn
    #define  DEBUG_USART_IRQHandler         USART3_IRQHandler
    
    #elif DEBUG_USART4
    //串口4-UART4
    #define  DEBUG_USARTx                   UART4
    #define  DEBUG_USART_CLK                RCC_APB1Periph_UART4
    #define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
    #define  DEBUG_USART_BAUDRATE           115200
    
    // USART GPIO 引脚宏定义
    #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC)
    #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
        
    #define  DEBUG_USART_TX_GPIO_PORT       GPIOC   
    #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_10
    #define  DEBUG_USART_RX_GPIO_PORT       GPIOC
    #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_11
    
    #define  DEBUG_USART_IRQ                UART4_IRQn
    #define  DEBUG_USART_IRQHandler         UART4_IRQHandler
    
    #elif DEBUG_USART5
    //串口5-UART5
    #define  DEBUG_USARTx                   UART5
    #define  DEBUG_USART_CLK                RCC_APB1Periph_UART5
    #define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
    #define  DEBUG_USART_BAUDRATE           115200
    
    // USART GPIO 引脚宏定义
    #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD)
    #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
        
    #define  DEBUG_USART_TX_GPIO_PORT       GPIOC   
    #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_12
    #define  DEBUG_USART_RX_GPIO_PORT       GPIOD
    #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_2
    
    #define  DEBUG_USART_IRQ                UART5_IRQn
    #define  DEBUG_USART_IRQHandler         UART5_IRQHandler
    
    #endif
    
    void USART_Config(void);
    void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data);
    void Usart_SendHalfWord(USART_TypeDef* pUSARTx, uint16_t data);
    void Usart_SendArray(USART_TypeDef* pUSARTx, uint8_t *array,uint8_t num);
    void Usart_SendStr(USART_TypeDef* pUSARTx, uint8_t *str);
    #endif  /* __BSP_USART_H */
    
    
    
    

    3.MAIN.C

    
    #include "stm32f10x.h"
    #include "bsp_led.h"
    #include "bsp_usart.h"
    
    
    
    int main(void)
    {	
    	uint8_t ch;
    	USART_Config();
    	LED_GPIO_Config();
    	
    	printf( "这是一个串口控制RGB灯的程序\n" );
     
    	while (1)
    	{
    		ch = getchar();
    	  printf( "ch=%c\n",ch );
    		
    		switch(ch)
       {
    			case '1': LED_RED;
    				break;
    		 
    			case '2': LED_GREEN;
    			  break;
    		 
    			case '3': LED_BLUE;
    			  break;
    		 
    			default: LED_RGBOFF;
    		    break;
    	 }
    	}
    }
    /*********************************************END OF FILE**********************/
    
    
    

    四、串口收发程序代码实现

    1.USART .C文件

    #include "bsp_usart.h"
    
    static void NVIC_Configuration(void)
    {
      NVIC_InitTypeDef NVIC_InitStructure;
      
      /* 嵌套向量中断控制器组选择 */
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
      
      /* 配置USART为中断源 */
      NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
      /* 抢断优先级*/
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
      /* 子优先级 */
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
      /* 使能中断 */
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      /* 初始化配置NVIC */
      NVIC_Init(&NVIC_InitStructure);
    }
    
    void USART_Config(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	USART_InitTypeDef USART_InitStructure;
    
    	// 打开串口GPIO的时钟
    	DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
    	
    	// 打开串口外设的时钟
    	DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
    
    	// 将USART Tx的GPIO配置为推挽复用模式
    	GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
    
      // 将USART Rx的GPIO配置为浮空输入模式
    	GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    	GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
    	
    	// 配置串口的工作参数
    	// 配置波特率
    	USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
    	// 配置 针数据字长
    	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    	// 配置停止位
    	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(DEBUG_USARTx, &USART_InitStructure);
    	
    	// 串口中断优先级配置
    	NVIC_Configuration();
    	
    	// 使能串口接收中断
    	USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);	
    	
    	// 使能串口
    	USART_Cmd(DEBUG_USARTx, ENABLE);	    
    }
    
    /* 发送一个字节 */
    void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data)
    {
    	USART_SendData(pUSARTx, data);
    	while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET );
    }
    
    /* 发送两个字节的数据 */
    void Usart_SendHalfWord(USART_TypeDef* pUSARTx, uint16_t data)
    {
    	uint8_t temp_h,temp_l;
    	
    	temp_h = (data&0xff00) >> 8 ;
    	temp_l = data&0xff;
    	
    	USART_SendData(pUSARTx, temp_h);
    	while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET );
    	
    	USART_SendData(pUSARTx, temp_l);
    	while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET );
    }
    
    /* 发送8位数据的数组 */
    void Usart_SendArray(USART_TypeDef* pUSARTx, uint8_t *array,uint8_t num)
    {
    	uint8_t i;
    	for( i=0; i<num; i++ )
      {
    		Usart_SendByte(pUSARTx, array[i]);
    	}
    	while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET );
    }
    
    /* 发送字符串 */
    void Usart_SendStr(USART_TypeDef* pUSARTx, uint8_t *str)
    {
    	uint8_t i=0;
    	do
      {
    		Usart_SendByte(pUSARTx, *(str+i));
    		i++;
    	}while(*(str+i) != '\0');
    	while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET );
    }
    
    ///重定向c库函数printf到串口,重定向后可使用printf函数
    int fputc(int ch, FILE *f)
    {
    		/* 发送一个字节数据到串口 */
    		USART_SendData(DEBUG_USARTx, (uint8_t) ch);
    		
    		/* 等待发送完毕 */
    		while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);		
    	
    		return (ch);
    }
    
    ///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
    int fgetc(FILE *f)
    {
    		/* 等待串口输入数据 */
    		while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);
    
    		return (int)USART_ReceiveData(DEBUG_USARTx);
    }
    
    
    
    
    

    2.USART.H文件

    #ifndef __BSP_USART_H
    #define __BSP_USART_H
    
    #include "stm32f10x.h"
    #include <stdio.h>
    
    #define DEBUG_USART1     1
    #define DEBUG_USART2     0
    #define DEBUG_USART3     0
    #define DEBUG_USART4     0
    #define DEBUG_USART5     0
    
    #if DEBUG_USART1
    // 串口1-USART1
    #define  DEBUG_USARTx                   USART1
    #define  DEBUG_USART_CLK                RCC_APB2Periph_USART1
    #define  DEBUG_USART_APBxClkCmd         RCC_APB2PeriphClockCmd
    #define  DEBUG_USART_BAUDRATE           115200
    
    // USART GPIO 引脚宏定义
    #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
    #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
        
    #define  DEBUG_USART_TX_GPIO_PORT       GPIOA   
    #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_9
    #define  DEBUG_USART_RX_GPIO_PORT       GPIOA
    #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_10
    
    #define  DEBUG_USART_IRQ                USART1_IRQn
    #define  DEBUG_USART_IRQHandler         USART1_IRQHandler
    
    #elif DEBUG_USART2
    //串口2-USART2
    #define  DEBUG_USARTx                   USART2
    #define  DEBUG_USART_CLK                RCC_APB1Periph_USART2
    #define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
    #define  DEBUG_USART_BAUDRATE           115200
    
    // USART GPIO 引脚宏定义
    #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
    #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
        
    #define  DEBUG_USART_TX_GPIO_PORT       GPIOA   
    #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_2
    #define  DEBUG_USART_RX_GPIO_PORT       GPIOA
    #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_3
    
    #define  DEBUG_USART_IRQ                USART2_IRQn
    #define  DEBUG_USART_IRQHandler         USART2_IRQHandler
    
    #elif DEBUG_USART3
    //串口3-USART3
    #define  DEBUG_USARTx                   USART3
    #define  DEBUG_USART_CLK                RCC_APB1Periph_USART3
    #define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
    #define  DEBUG_USART_BAUDRATE           115200
    
    // USART GPIO 引脚宏定义
    #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOB)
    #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
        
    #define  DEBUG_USART_TX_GPIO_PORT       GPIOB   
    #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_10
    #define  DEBUG_USART_RX_GPIO_PORT       GPIOB
    #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_11
    
    #define  DEBUG_USART_IRQ                USART3_IRQn
    #define  DEBUG_USART_IRQHandler         USART3_IRQHandler
    
    #elif DEBUG_USART4
    //串口4-UART4
    #define  DEBUG_USARTx                   UART4
    #define  DEBUG_USART_CLK                RCC_APB1Periph_UART4
    #define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
    #define  DEBUG_USART_BAUDRATE           115200
    
    // USART GPIO 引脚宏定义
    #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC)
    #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
        
    #define  DEBUG_USART_TX_GPIO_PORT       GPIOC   
    #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_10
    #define  DEBUG_USART_RX_GPIO_PORT       GPIOC
    #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_11
    
    #define  DEBUG_USART_IRQ                UART4_IRQn
    #define  DEBUG_USART_IRQHandler         UART4_IRQHandler
    
    #elif DEBUG_USART5
    //串口5-UART5
    #define  DEBUG_USARTx                   UART5
    #define  DEBUG_USART_CLK                RCC_APB1Periph_UART5
    #define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd
    #define  DEBUG_USART_BAUDRATE           115200
    
    // USART GPIO 引脚宏定义
    #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD)
    #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
        
    #define  DEBUG_USART_TX_GPIO_PORT       GPIOC   
    #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_12
    #define  DEBUG_USART_RX_GPIO_PORT       GPIOD
    #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_2
    
    #define  DEBUG_USART_IRQ                UART5_IRQn
    #define  DEBUG_USART_IRQHandler         UART5_IRQHandler
    
    #endif
    
    void USART_Config(void);
    void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data);
    void Usart_SendHalfWord(USART_TypeDef* pUSARTx, uint16_t data);
    void Usart_SendArray(USART_TypeDef* pUSARTx, uint8_t *array,uint8_t num);
    void Usart_SendStr(USART_TypeDef* pUSARTx, uint8_t *str);
    #endif  /* __BSP_USART_H */
    
    
    
    

    3.MAIN.C

    
    #include "stm32f10x.h"
    #include "bsp_led.h"
    #include "bsp_usart.h"
    
    
    
    int main(void)
    {	
      uint8_t a[10]={100,2,3,4,5,6,7,8,9,10};
    	USART_Config();
    	
    
    	
    	printf( "串口printf函数测试\n" );
    	
    	while (1)
    	{
    	
    	}
    }
    /*********************************************END OF FILE**********************/
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    展开全文
  • 本文将开始分析定时器OSTM0初始化代码,其他已发布的代码分析可参看以下链接 一、系统时钟初始化R_SYSTEM_ClockInit(); 二、定时器初始化R_SYSTEM_TimerInit(); 版权声明 本博文系广州欧科曼科技有限公司所有,...

    本文将开始分析定时器OSTM0初始化的代码,其他已发布的代码分析可参看以下链接
    一、系统时钟初始化R_SYSTEM_ClockInit();
    二、定时器初始化R_SYSTEM_TimerInit();

    版权声明
    本博文系广州欧科曼科技有限公司所有,转载请注明出处。 广州欧科曼科技有限公司致力于瑞萨MCU及周边相关产品开发设计。

    email:1256153255@qq.com

    website for get 瑞萨RH850开发板 and 瑞萨E1仿真器
    在这里插入图片描述

    言归正传开始介绍本文的内容。

    3、UART初始化
    在这里插入图片描述
    Code segment 3.1
    在这里插入图片描述
    在这里插入图片描述
    图3.1
    从上面可知,RH850F1L的LIN和UART是共用的,因此LIN和UART不能同时使用。
    Code segment 3.1->Line86,将port0_2设置为输出模式,用于UART的TX。从图3.1的Alternate Mode表可知,P0_2的 2nd Alternative Mode的Output是RLIN30TX。
    Code segment 3.1->Line87,将port0_3设置为输入模式,用于UART的RX。从图3.1的Alternate Mode表可知,P0_3的 2nd Alternative Mode的Input是RLIN30RX。

    Code segment 3.1->Line89:函数R_RLIN30_UartInit()展开。
    Code segment 3.2是UART寄存器的初始化配置,包括禁能LIN,设置波特率、停止位等。
    在这里插入图片描述
    Code segment 3.2
    Code segment 3.1->Line266,禁能UART的RX和TX
    在这里插入图片描述
    图3.2
    Code segment 3.2->Line267,调整为LIN Reset模式
    在这里插入图片描述
    图3.3
    在这里插入图片描述
    图3.4
    Code segment 3.2->Line270,RLN30LMD=0x01u;
    RLN30LMD的bit1 bit0 = 01,表示将LIN/UART共用模式调整为UART模式
    在这里插入图片描述
    图3.5
    Code segment 3.2->Line274串口参数配置
    UBLS=0,UART数据位长8bit
    UBOS = 0:LSB First
    USBLS:停止位长1bit
    UPS[1:0]=00,无奇偶校验
    URPS=0,接收正常输出,不用发转
    UTPS=0,发送正常输出,不用发转
    在这里插入图片描述
    图3.6
    Code segment 3.2->Line282无error检测
    在这里插入图片描述
    图3.7
    Code segment 3.2->Line285 bit sampleing count和prescaler clock设置
    NSPB[3:0]=5(0101) → 6 samplings
    LPRS[2:0]=0(000) → 不分频
    在这里插入图片描述
    图3.8
    在这里插入图片描述
    图3.9
    Code segment 3.2->Line289 设置波特率
    到了这里应该也会有朋友要问了,这个0x02B5(693)值和9600bps的波特率有什么关系,不急不急,慢慢来分析。
    从图3.9得知
    baud rate = frequency * RLN3nLWBR.LPRS[2:0] ÷ (RLN3nLBRP01 + 1) ÷ RLN3nLWBR.NSPB[3:0]
    = 40MHz * (1/1) ÷ (0x02B5+1) ÷ 6
    ≈ 9600bps

    Code segment 3.2->Line294 取消LIN Reset模式
    在Code segment 3.2->Line267设置为LIN Reset模式,此处取消设置
    Code segment 3.2->Line298 使能UART的TX和RX
    在Code segment 3.2->Line266设置为禁能UART的TX和RX,此处打开。

    在这里插入图片描述
    图3.10
    Code segment 3.1 ->Line93 使能UART发送中断MASK
    *IC_ptr &= ~0x80;将bit7置为0,使能UART中断处理
    在这里插入图片描述
    图3.11
    Code segment 3.1 ->Line92 使能UART发送中断
    *IC_ptr |= 0x40;将bit6置为1,使能中断向量表中的UART中断

    到此为止,UART的初始化设置已全部分析完成。

    展开全文
  • 单片机c8051f340的串口和端口初始化程序代码
  • windows在前文C#程序与单片机通信时,如何自动初始化串口(1)?中介绍了如何注册程序,使用程序能够监听USB插、拔事件。当程序获得这些事件之后,如何确定事件源就是我们关注的那个USB设备呢?USB PID信息每个USB设备...
    e6136720349a939e0d9908823b6dd489.png

    windows

    在前文C#程序与单片机通信时,如何自动初始化串口(1)?中介绍了如何注册程序,使用程序能够监听USB插、拔事件。当程序获得这些事件之后,如何确定事件源就是我们关注的那个USB设备呢?

    eb856886b01c335e0ceed853c6a16b35.png

    USB PID信息

    每个USB设备都有他们的生产厂家代码、设备代码等信息,我们可以利用此信息来确定该设备。比如,有一个设备代码如下的USB设备(USB虚拟串口),此值可以从Windows设备管理>USB驱动信息中获取。

    Device USBVID_0483&PID_5740123456

    //定义一个标识字符串const string VID_STR = @"USBVID_0483&PID_5740"; 

    在前文的Usb_DeviceAdded()函数中,要从系统中获得USB设备信息,并打开相应的串口。C#中要用到System.Management(类似系统设备管理功能),采用命令的方式实现,如下

    //搜索所有插拔设备ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_PnPEntity");//逐个访问foreach (ManagementObject mo in searcher.Get()){ //比较是否正确 if (0== string.Compare(VID_STR, 0, mo["PNPDeviceID"].ToString(), 0, VID_LEN)) { try {  //找到对应设备 m_Port = new SerialPort(mo["DeviceID"].ToString(), 115200, Parity.None, 8, StopBits.One) { //缓冲区大小 WriteBufferSize = 1024, ReadBufferSize = 1024, //超时设定 ReadTimeout = 2000//ms };  //打开串口 m_Port.Open(); IsOpen = m_Port.IsOpen; } catch { m_Port.Dispose(); //如果失败则提示 throw new ArgumentNullException("Port Open Failed
    展开全文
  • 51单片机串口通信 实验仿真图: ...说明:主机和从机代码分开。 //主机程序 (汇编) ORG 0000H //将程序放到RAM LJMP START ORG 0030H START: MOV SP,#60H //堆栈赋值 CALL INIT //进入定时器
  • 串口配置,给出中断式串口通信,详细的寄存器作用解析作者:Justice_Gao日期:2017年7月29日问题描述:参考源代码串口通信程序初始化设置以及通信的方式,比较难理解,和STM32F4的串口通信不同,特别是接收这里我...
  • 考试 学资学习网 押题 软件KeilMDK 芯片STM32F103/STM32F107 串口数量4 备注4个串口均配置为 DMA读取 //串口 1初始化函数 void uartl_init(u32 bound) { //GPIO 端口设置 GPIOni tTypeDef GPIOn itStructure;...
  • 串口控件发送数据初始化设置:   1,打开串口按钮初始化设置 void CSerialPortDlg::OnBnClickedButtonOpen() //发送按钮程序初始化 {  //TODO: 在此添加控件通知处理程序代码  if(m_mscomm.get_PortOpen())  ...
  • 先打开文件并且初始化stm32的下载接口,其中InitStm32Isp 用来初始化下载接口 int main (int argc, char *argv[]) { unsigned char *codebuf; int len,rst; FILE *fp; if(argc<2) { printf("no bin ...
  • 为什么串口大9初始化会报错?

    千次阅读 2016-02-02 15:10:23
    程序串口配置大于9初始化就会报错,看看代码,这样写的: 原来被限制了,改成如下代码 立即生成,运行依然报错! 检查代码并无异象,但原因肯定在于初始化的地方,于是对这个函数产生...
  • 1、用汇编写一个简单的串口初始化程序 @ USART0相关寄存器定义 #define ULCON0 0X50000000 /*线路控制寄存器*/ #define UCON0 0X50000004 /*控制寄存器*/ #define UFCON0 0X50000008 /*FIFO 控制寄存器*/ #...
  • 从硬件分析、CUBEMX初始化、 敲代码代码分析,来领着大家对STM32的项目过程有个大致的了解以及养成建立一套规范化的工程文件架构的习惯 废话不多说,上干货 一、硬件分析 这里先不用了解太多底层的,因为我们对32...
  • 我们的C程序通常会经过:编译,链接,最后形成可执行文件。当编译过后,文件中出现的地址称为编译地址(编译地址就是编译器为每条指令指定的地址,有部分地址不能确定),而在链接后程序中出现的称为链接地址,与此...
  • (1)使用CubeMX创建串口初始化代码 采用CubeMX的原因主要是该工具生成的代码完全是居于hal库的,可以较好的和keil 的RTE工具对接。代码生成完后项目保留备用,后面要粘贴到keil RTE创建的项目内。 (2)使用keil ...
  • 一个基于串口的手机短信发送/接收程序;Demo很简单,是以异步方式读写串口的;在对话框初始化中修改串口的配置参数正确后,能100%的正常发送/接收短信。
  • 串口初始化函数是CubeMx自动生成的,其波特率等参数最好与freemodbus协议栈初始化参数保持一致,这样方便程序的维护和功能扩展,例如,当需要修改通信的波特率的时候,只需要修改一处就可以了,不用先修改串口的...
  • 代码包含单片机串口初始化配置,轮训方式发送和接收数据,以及串口接收中断函数,并包含invector.c汇编代码的配置,以及oesk任务相关函数。
  • 串口裸机程序设计

    2017-06-04 23:50:09
    我们要写串口逻辑程序,那么我们要先连接串口的基本功能 串口无外乎就是两个基本功能,一个是发,一个是收。当然我们在串口的收和发之前,我们首先的进行...我们随便找一份代码可以发现,串口初始化做了如下几个工作
  • PB串口通讯API源代码

    热门讨论 2008-04-01 08:59:46
    访问串口时先调用of_setcommport(string commport)和of_setcommsettings(string commsettings)来设置要访问的端口及端口初始化参数,然后调用of_open()初始化端口。或直接使用of_open(string comport,string ...
  • 利用stm32f103rc的串口,编写了五个串口初始化程序,中断函数等通讯必须程序代码
  • 是我以前做电子设计时一个老师给的资料,里面包含了AVR驱动1602LCD(4线)、AD/DA、DS1302、键盘、PWM、串口UART、T6963、定时器等程序,还有一个AVR的初始化代码生成器,只要设置好选项就可以生成GCC、ICC所用的...
  • C#串口介绍以及简单串口通信程序设计和实现

    千次下载 热门讨论 2017-04-26 18:20:42
    2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if ...
  • 第一个:初始化代码写public Form1()里面,如图一。 第二个:初始化代码写Form1_Load里面,如图二。 第一个程序能正常接收和发送数据。 第二个程序能正常接收和发送数据,但是,数据没有在接收窗口显示出来。为...
  • STC 12C5A60S2串口2通信主要代码示例

    万次阅读 2012-10-12 14:15:49
    用过stc12C5A60S2单片机的朋友都知道,该单片机有两个串口可用,看到官网的程序注释的也是比较多,所以自己写了个串口2使用的程序,由于代码相对简单,所以这里只罗列出了串口2的的初始化、发送和接收函数供大家参考...
  • 程序是基于下面博客修改而来,添加了更多的代码注释和一些功能,具体环境安装看下面的微博 ...MainFrame.java既是主窗口的类,也包含主函数,主函数如下,就是绘制主窗口,调用MainFrame的初始化函数,对于jav...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 439
精华内容 175
关键字:

串口初始化程序代码