你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

[复制链接]
北京小王儿 发布时间:2009-3-20 14:39

            一步一步的走 GPIO    按键    LED    定时器都说了 下面开始串口UART咯
            
            本教程的主角是:串口 UART  

            
            通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。
            它支持同步单向通信和半双工单线通信。它也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。用于多缓冲器配置的DMA方式,可以实现高速数据通信。
            
            主要特性:
            全双工的,异步通信
            NR 标准格式
            分数波特率发生器系统
                     -发送和接收共用的可编程波特率,最高到4.5Mbits/s
            可编程数据字长度(8位或9位)
            可配置的停止位          -支持1或2个停止位
            LIN主发送同步断开符的能力以及LIN从检测断开符的能力
                     -    当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符
            发送方为同步传输提供时钟
            IRDA SIR 编码器解码器
                     -    在正常模式下支持3/16位的持续时间
            智能卡模拟功能
                     -    智能卡接口支持ISO7816          -3标准里定义的异步协议智能卡
                     -    智能卡用到的0.5和1.5个停止位
            单线半双工通信
            使用DMA的可配置的多缓冲器通信
                     -    在保留的SRAM里利用集中式DMA缓冲接收/发送字节
            单独的发送器和接收器使能位
            检测标志
                     -    接收缓冲器满
                     -    发送缓冲器空
                     -    传输结束标志
            校验控制
                     -    发送校验位
                     -    对接收数据进行校验
            四个错误检测标志
                     -    溢出错误
                     -    噪音错误
                     -    帧错误
                     -    校验错误
                10个带标志的中断源
                     -    CTS改变
                     -    LIN断开符检测
                     -    发送数据寄存器
                     -    发送完成
                     -    接收数据寄存器
                     -    检测到总线为空
                     -    溢出错误
                     -    帧错误
                     -    噪音错误
                     -    校验错误
            多处理器通信         -          - 如果地址不匹配,则进入静默模式
            从静默模式中唤醒(通过空闲总线检测或地址标志检测)
            两种唤醒接收器的方式
                     -    地址位(MSB)
                     -    空闲总线
            
            
            
            
[/td]        [/tr]        [tr]            [td]
            
            STM32的串口配置 也挺方便的
            
            首先是配置UART的GPIO口
            /*******************************************************************************
            * Function Name    : UART1_GPIO_Configuration
            * Description          : Configures the uart1 GPIO ports.
            * Input                          : None
            * Output                      : None
            * Return                      : None
            *******************************************************************************/
            void UART1_GPIO_Configuration(void)
            {
            GPIO_InitTypeDef GPIO_InitStructure;
            // Configure USART1_Tx as alternate function push-pull
            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);
            
            // Configure USART1_Rx as input floating
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
            GPIO_Init(GPIOA, &GPIO_InitStructure);  
            }
            
            然后是配置串口参数
            
            
            /* 如果使用查询的方式发送和接收数据 则不需要使用串口的中断  
                如果需要使用中断的方式发送和接收数据 则需要使能串口中断
                 函数原形 void USART_ITConfig(USART_TypeDef* USARTx, u16 USART_IT, FunctionalState NewState)
                 功能描述 使能或者失能指定的 USART 中断
               
                     USART_IT                         描述
                     USART_IT_PE         奇偶错误中断
                     USART_IT_TXE     发送中断
                     USART_IT_TC         传输完成中断
                     USART_IT_RXNE 接收中断
                     USART_IT_IDLE     空闲总线中断
                     USART_IT_LBD     LIN中断检测中断
                     USART_IT_CTS     CTS中断
                     USART_IT_ERR     错误中断
            
            */
            
            
            /*******************************************************************************
            * Function Name    : UART1_Configuration
            * Description          : Configures the uart1
            * Input                          : None
            * Output                      : None
            * Return                      : None
            *******************************************************************************/
            void UART1_Configuration(void)
            {
            
                USART_InitTypeDef USART_InitStructure;
                /* USART1 configured as follow:
                     - BaudRate = 9600 baud  
                     - Word Length = 8 Bits
                     - One Stop Bit
                     - No parity
                     - Hardware flow control disabled (RTS and CTS signals)
                     - Receive and transmit enabled
                */
                USART_InitStructure.USART_BaudRate = 9600;
                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;
              
                /* Configure the USART1*/
                USART_Init(USART1, &USART_InitStructure);
            
                /* Enable USART1 Receive and Transmit interrupts */
                USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
            
            
                /* Enable the USART1 */
                USART_Cmd(USART1, ENABLE);  
            }
            
            
[/td]        [/tr]        [tr]            [td]
            发送一个字符
            /*******************************************************************************
            * Function Name    : Uart1_PutChar
            * Description          : printf a char to the uart.
            * Input                          : None
            * Output                      : None
            * Return                      : None
            *******************************************************************************/
            u8 Uart1_PutChar(u8 ch)
            {
            /* Write a character to the USART */
            USART_SendData(USART1, (u8) ch);
            while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
            {
            }
            return ch;
            }
            
[/td]        [/tr]        [tr]            [td]
            
            <font size="3">发送一个字符串
            /*******************************************************************************
            * Function Name    : Uart1_PutString
            * Description          : print a string to the uart1
            * Input                          : buf为发送数据的地址 , len为发送字符的个数
            * Output                      : None
            * Return                      : None
            *******************************************************************************/
            void Uart1_PutString(u8* buf , u8 len)
            {
            for(u8 i=0;i
收藏 评论7 发布时间:2009-3-20 14:39

举报

7个回答
北京小王儿 回答时间:2009-3-20 14:41:36

豆皮 - STM32开发板入门教程(五) - 我的豆皮会唱歌 (原...

      
            呵呵 不是播放MP3啦(顺便说一下 豆皮播放MP3 bozai已经做出来了哦 呵呵 )
            是利用豆皮STM32开发板上的蜂鸣器播放不同音符 不同的pwm频率加到蜂鸣器上能产生不一样的音符
            呵呵 原理到是简单 但是 蜂鸣器真的不好调 音符也不好确定 我花了好长的时间 才确定的频率 把实验室的人都吵疯了 一个个都对我有意见啊 因为我在不停的用蜂鸣器发出“鬼叫的声音”    娃哈哈哈 基本上可以用了
            还将就听着    呵呵 附上一个音符表 大家也可以自己去尝试别的频率 呵呵
            
            本教程的主角是:STM32 PWM 蜂鸣器  
            
         
  
            
            各音的频率    大家可以参考着修改频率 这样就可以发出悦耳的声音了 呵呵
            初始化pwm输出 豆皮借的是TIM4的channnel4    呵呵
                        /*******************************************************************************
                        * Function Name    : Change_for_Note
                        * Description : 修改pwm频率
                        * Input         : u16类型的频率值
                        * Output         : None
                        * Return         : None
                        *******************************************************************************/
                        void Change_for_Note(u16 NoteSet)
                        {
                          
                            TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;
                            TIM_OCInitTypeDef    TIM_OCInitStructure;
                          
                            /* Time base configuration */
                            TIM_TimeBaseStructure.TIM_Period = NoteSet;
                            TIM_TimeBaseStructure.TIM_Prescaler = 0;
                            TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4;
                            TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
                            TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
                          
                            /* PWM1 Mode configuration: Channel4 */
                            TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
                            TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
                            TIM_OCInitStructure.TIM_Pulse = NoteSet/2;
                            TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High ;
                            TIM_OC4Init(TIM4, &TIM_OCInitStructure);
                        }  
                        
                        
                        
                        
[/td]                    [/tr]                    [tr]                        [td]
                        
                        <font size="3">/* 取得音高和节拍 奏一个音符 */
                        void Sing_A_Note(int music,int mytime)
                        {
                        
                        int i;
                        Change_for_Note(music);
                        for(i=0;i
chsking 回答时间:2009-4-10 10:13:43

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

怎么没有附件啊 我想下载
sxz163 回答时间:2009-5-9 19:55:20

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART
附件在哪里?
dontium 回答时间:2010-1-29 14:17:56

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

哈哈,豆皮肯定不是个音乐爱好者了,要不,怎么不知道十二平均率?
C调1= 440 Hz
然后按12平均率,算出每个音符的频率,
wanglujiao-2794 回答时间:2010-4-20 20:53:53

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

附件呢
yeye107 回答时间:2010-8-30 22:19:24

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

学习了。。。。
yeye107 回答时间:2010-8-30 22:19:35

RE:豆皮 - STM32开发板入门教程(四) - 串口通讯 UART

学习了。。。。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版