<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Stm32使用Usart代碼例子輪詢、中斷、DMA

          Stm32使用Usart代碼例子輪詢、中斷、DMA

          作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
          1. /*
          2. 轉(zhuǎn)載請(qǐng)注明出處:tedeum.iteye.com
          3. /

          首先是不使用中斷的方法使用usart1,管腳pa9,pa10,此方法已在f3discovery上驗(yàn)證通過(guò),來(lái)源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2Fusart%20code&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=524

          本文引用地址:http://www.ex-cimer.com/article/201611/318099.htm
          C代碼
          1. //STM32USART1(TxPA.9,RxPA.10)STM32F3-Discovery-sourcer32@gmail.com
          2. #include"stm32f30x.h"
          3. //
          4. voidRCC_Configuration(void)
          5. {
          6. /*EnableGPIOclock*/
          7. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
          8. /*EnableUSARTclock*/
          9. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
          10. }
          11. //
          12. voidGPIO_Configuration(void)
          13. {
          14. GPIO_InitTypeDefGPIO_InitStructure;
          15. /*ConnectPA9toUSART1_Tx*/
          16. GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_7);
          17. /*ConnectPA10toUSART1_Rx*/
          18. GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_7);
          19. /*ConfigureUSARTTxasalternatefunctionpush-pull*/
          20. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
          21. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
          22. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
          23. GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
          24. GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
          25. GPIO_Init(GPIOA,&GPIO_InitStructure);
          26. /*ConfigureUSARTRxasalternatefunctionpush-pull*/
          27. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
          28. GPIO_Init(GPIOA,&GPIO_InitStructure);
          29. }
          30. //
          31. voidUSART1_Configuration(void)
          32. {
          33. USART_InitTypeDefUSART_InitStructure;
          34. /*USARTresourcesconfiguration(Clock,GPIOpinsandUSARTregisters)----*/
          35. /*USARTconfiguredasfollow:
          36. -BaudRate=115200baud
          37. -WordLength=8Bits
          38. -OneStopBit
          39. -Noparity
          40. -Hardwareflowcontroldisabled(RTSandCTSsignals)
          41. -Receiveandtransmitenabled
          42. */
          43. USART_InitStructure.USART_BaudRate=115200;
          44. USART_InitStructure.USART_WordLength=USART_WordLength_8b;
          45. USART_InitStructure.USART_StopBits=USART_StopBits_1;
          46. USART_InitStructure.USART_Parity=USART_Parity_No;
          47. USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
          48. USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
          49. /*USARTconfiguration*/
          50. USART_Init(USART1,&USART_InitStructure);
          51. /*EnableUSART*/
          52. USART_Cmd(USART1,ENABLE);
          53. }
          54. //
          55. intmain(void)
          56. {
          57. RCC_Configuration();
          58. GPIO_Configuration();
          59. USART1_Configuration();
          60. while(1)
          61. {
          62. while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//WaitforEmpty
          63. USART_SendData(USART1,0x49);//SendI
          64. }
          65. while(1);//Dontwanttoexit
          66. }
          67. //
          68. #ifdefUSE_FULL_ASSERT
          69. /
          70. *@briefReportsthenameofthesourcefileandthesourcelinenumber
          71. *wheretheassert_paramerrorhasoccurred.
          72. *@paramfile:pointertothesourcefilename
          73. *@paramline:assert_paramerrorlinesourcenumber
          74. *@retvalNone
          75. */
          76. voidassert_failed(uint8_t*file,uint32_tline)
          77. {
          78. /*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,
          79. ex:printf("Wrongparametersvalue:file%sonline%drn",file,line)*/
          80. /*Infiniteloop*/
          81. while(1)
          82. {
          83. }
          84. }
          85. #endif

          接下來(lái)是使用中斷的方法,使用USART3,管腳pd8,pd9,來(lái)源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/STM32F4%20USART%20receive%20problem&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=124

          C代碼
          1. //STM32USARTIRQTX/RXLoop(USART3TxPD.8,RxPD.9)STM32F4Discovery-sourcer32@gmail.com
          2. #include"stm32f4_discovery.h"
          3. volatilecharStringLoop[]="Thequickbrownfoxjumpsoverthelazydogrn";
          4. //
          5. voidRCC_Configuration(void)
          6. {
          7. /*---------------------------SystemClocksConfiguration-----------------*/
          8. /*USART3clockenable*/
          9. RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
          10. /*GPIODclockenable*/
          11. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
          12. }
          13. //
          14. voidGPIO_Configuration(void)
          15. {
          16. GPIO_InitTypeDefGPIO_InitStructure;
          17. /*--------------------------GPIOConfiguration----------------------------*/
          18. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;
          19. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
          20. GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
          21. GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
          22. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
          23. GPIO_Init(GPIOD,&GPIO_InitStructure);
          24. /*ConnectUSARTpinstoAF*/
          25. GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_USART3);
          26. GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_USART3);
          27. }
          28. //
          29. voidUSART3_Configuration(void)
          30. {
          31. USART_InitTypeDefUSART_InitStructure;
          32. /*USARTxconfiguration------------------------------------------------------*/
          33. /*USARTxconfiguredasfollow:
          34. -BaudRate=9600baud
          35. -WordLength=8Bits
          36. -OneStopBit
          37. -Noparity
          38. -Hardwareflowcontroldisabled(RTSandCTSsignals)
          39. -Receiveandtransmitenabled
          40. */
          41. USART_InitStructure.USART_BaudRate=9600;
          42. USART_InitStructure.USART_WordLength=USART_WordLength_8b;
          43. USART_InitStructure.USART_StopBits=USART_StopBits_1;
          44. USART_InitStructure.USART_Parity=USART_Parity_No;
          45. USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
          46. USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
          47. USART_Init(USART3,&USART_InitStructure);
          48. USART_Cmd(USART3,ENABLE);
          49. USART_ITConfig(USART3,USART_IT_TXE,ENABLE);
          50. USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
          51. }
          52. //
          53. voidNVIC_Configuration(void)
          54. {
          55. NVIC_InitTypeDefNVIC_InitStructure;
          56. /*ConfiguretheNVICPreemptionPriorityBits*/
          57. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
          58. /*EnabletheUSART3Interrupt*/
          59. NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQn;
          60. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
          61. NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
          62. NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
          63. NVIC_Init(&NVIC_InitStructure);
          64. }
          65. //
          66. voidUSART3_IRQHandler(void)
          67. {
          68. staticinttx_index=0;
          69. staticintrx_index=0;
          70. if(USART_GetITStatus(USART3,USART_IT_TXE)!=RESET)//Transmitthestringinaloop
          71. {
          72. USART_SendData(USART3,StringLoop[tx_index++]);
          73. if(tx_index>=(sizeof(StringLoop)-1))
          74. tx_index=0;
          75. }
          76. if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET)//Receivedcharactersmodifystring
          77. {
          78. StringLoop[rx_index++]=USART_ReceiveData(USART3);
          79. if(rx_index>=(sizeof(StringLoop)-1))
          80. rx_index=0;
          81. }
          82. }
          83. //
          84. intmain(void)
          85. {
          86. RCC_Configuration();
          87. GPIO_Configuration();
          88. NVIC_Configuration();
          89. USART3_Configuration();
          90. while(1);//Dontwanttoexit
          91. }
          92. //

          最后,是使用DMA的方法,使用usart5,管腳:pc12,pd2,來(lái)源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/DMA%20Memory%20To%20UART5&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=760

          C代碼
          1. //STM32UART5DMATX(TxPC.12,RxPD.2)STM32F4Discovery-sourcer32@gmail.com
          2. #include"stm32f4_discovery.h"
          3. //
          4. voidRCC_Configuration(void)
          5. {
          6. /*---------------------------SystemClocksConfiguration-----------------*/
          7. /*UART5clockenable*/
          8. RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE);
          9. /*GPIOCandGPIODclockenable*/
          10. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD,ENABLE);
          11. /*DMA1clockenable*/
          12. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);
          13. }
          14. //
          15. voidGPIO_Configuration(void)
          16. {
          17. GPIO_InitTypeDefGPIO_InitStructure;
          18. /*--------------------------GPIOConfiguration----------------------------*/
          19. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;//PC.12UART5_TX,potentialclashSDINCS43L22
          20. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
          21. GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
          22. GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
          23. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
          24. GPIO_Init(GPIOC,&GPIO_InitStructure);
          25. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//PD.2UART5_RX
          26. GPIO_Init(GPIOD,&GPIO_InitStructure);
          27. /*ConnectUSARTpinstoAF*/
          28. GPIO_PinAFConfig(GPIOC,GPIO_PinSource12,GPIO_AF_UART5);
          29. GPIO_PinAFConfig(GPIOD,GPIO_PinSource2,GPIO_AF_UART5);
          30. }
          31. //
          32. voidUART5_Configuration(void)
          33. {
          34. USART_InitTypeDefUSART_InitStructure;
          35. /*USARTxconfiguration------------------------------------------------------*/
          36. /*USARTxconfiguredasfollow:
          37. -BaudRate=115200baud
          38. -WordLength=8Bits
          39. -OneStopBit
          40. -Noparity
          41. -Hardwareflowcontroldisabled(RTSandCTSsignals)
          42. -Receiveandtransmitenabled
          43. */
          44. USART_InitStructure.USART_BaudRate=115200;
          45. USART_InitStructure.USART_WordLength=USART_WordLength_8b;
          46. USART_InitStructure.USART_StopBits=USART_StopBits_1;
          47. USART_InitStructure.USART_Parity=USART_Parity_No;
          48. USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
          49. USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
          50. USART_Init(UART5,&USART_InitStructure);
          51. USART_Cmd(UART5,ENABLE);
          52. }
          53. //
          54. charBuffer[]="Thequickbrownfoxjumpsoverthelazydogrn";
          55. voidDMA_Configuration(void)
          56. {
          57. DMA_InitTypeDefDMA_InitStructure;
          58. DMA_DeInit(DMA1_Stream7);
          59. DMA_InitStructure.DMA_Channel=DMA_Channel_4;
          60. DMA_InitStructure.DMA_DIR=DMA_DIR_MemoryToPeripheral;//Transmit
          61. DMA_InitStructure.DMA_Memory0BaseAddr=(uint32_t)Buffer;
          62. DMA_InitStructure.DMA_BufferSize=(uint16_t)sizeof(Buffer)-1;
          63. DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32_t)&UART5->DR;
          64. DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
          65. DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
          66. DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
          67. DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
          68. DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;
          69. DMA_InitStructure.DMA_Priority=DMA_Priority_High;
          70. DMA_InitStructure.DMA_FIFOMode=DMA_FIFOMode_Enable;
          71. DMA_InitStructure.DMA_FIFOThreshold=DMA_FIFOThreshold_Full;
          72. DMA_InitStructure.DMA_MemoryBurst=DMA_MemoryBurst_Single;
          73. DMA_InitStructure.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;
          74. DMA_Init(DMA1_Stream7,&DMA_InitStructure);
          75. /*EnabletheUSARTTxDMArequest*/
          76. USART_DMACmd(UART5,USART_DMAReq_Tx,ENABLE);
          77. /*EnableDMAStreamTransferCompleteinterrupt*/
          78. DMA_ITConfig(DMA1_Stream7,DMA_IT_TC,ENABLE);
          79. /*EnabletheDMARXStream*/
          80. DMA_Cmd(DMA1_Stream7,ENABLE);
          81. }
          82. //
          83. voidDMA1_Stream7_IRQHandler(void)
          84. {
          85. /*TestonDMAStreamTransferCompleteinterrupt*/
          86. if(DMA_GetITStatus(DMA1_Stream7,DMA_IT_TCIF7))
          87. {
          88. /*ClearDMAStreamTransferCompleteinterruptpendingbit*/
          89. DMA_ClearITPendingBit(DMA1_Stream7,DMA_IT_TCIF7);
          90. }
          91. }
          92. //
          93. voidNVIC_Configuration(void)
          94. {
          95. NVIC_InitTypeDefNVIC_InitStructure;
          96. /*ConfigurethePriorityGroupto2bits*/
          97. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
          98. /*EnabletheUART5RXDMAInterrupt*/
          99. NVIC_InitStructure.NVIC_IRQChannel=DMA1_Stream7_IRQn;
          100. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
          101. NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
          102. NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
          103. NVIC_Init(&NVIC_InitStructure);
          104. }
          105. //
          106. intmain(void)
          107. {
          108. RCC_Configuration();
          109. NVIC_Configuration();
          110. GPIO_Configuration();
          111. UART5_Configuration();
          112. DMA_Configuration();
          113. while(1);//Dontwanttoexit
          114. }
          115. //
          116. #ifdefUSE_FULL_ASSERT
          117. /
          118. *@briefReportsthenameofthesourcefileandthesourcelinenumber
          119. *wheretheassert_paramerrorhasoccurred.
          120. *@paramfile:pointertothesourcefilename
          121. *@paramline:assert_paramerrorlinesourcenumber
          122. *@retvalNone
          123. */
          124. voidassert_failed(uint8_t*file,uint32_tline)
          125. {
          126. /*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,
          127. ex:printf("Wrongparametersvalue:file%sonline%drn",file,line)*/
          128. /*Infiniteloop*/
          129. while(1)
          130. {
          131. }
          132. }
          133. #endif
          134. /
          135. *@}
          136. */
          137. //



          關(guān)鍵詞: Stm32Usart輪詢中斷DM

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();