Stm32使用Usart代码例子轮询、中断、DMA

发布者:RainbowJoy最新更新时间:2016-06-13 来源: eefocus关键字:Stm32  Usart  轮询  中断  DMA 手机看文章 扫描二维码
随时随地手机看文章
  1. /* 
  2. 转载请注明出处:tedeum.iteye.com 
  3. /  

 首先是不使用中断的方法使用usart1,管脚pa9,pa10,此方法已在f3discovery上验证通过,来源: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

C代码  Stm32使用Usart代码例子轮询、中断、DMA
  1. // STM32 USART1 (Tx PA.9, Rx PA.10) STM32F3-Discovery - sourcer32@gmail.com  
  2.    
  3. #include "stm32f30x.h"  
  4.    
  5. //  
  6.     
  7. void RCC_Configuration(void)  
  8. {  
  9.   /* Enable GPIO clock */  
  10.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);  
  11.    
  12.   /* Enable USART clock */  
  13.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);  
  14. }  
  15.    
  16. //  
  17.     
  18. void GPIO_Configuration(void)  
  19. {  
  20.   GPIO_InitTypeDef GPIO_InitStructure;  
  21.    
  22.   /* Connect PA9 to USART1_Tx */  
  23.   GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_7);  
  24.    
  25.   /* Connect PA10 to USART1_Rx */  
  26.   GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7);  
  27.    
  28.   /* Configure USART Tx as alternate function push-pull */  
  29.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  
  30.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  
  31.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  32.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  
  33.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  
  34.   GPIO_Init(GPIOA, &GPIO_InitStructure);  
  35.    
  36.   /* Configure USART Rx as alternate function push-pull */  
  37.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  
  38.   GPIO_Init(GPIOA, &GPIO_InitStructure);  
  39. }  
  40.    
  41. //  
  42.    
  43. void USART1_Configuration(void)  
  44. {  
  45.   USART_InitTypeDef USART_InitStructure;  
  46.    
  47.   /* USART resources configuration (Clock, GPIO pins and USART registers) ----*/  
  48.   /* USART configured as follow: 
  49.         - BaudRate = 115200 baud 
  50.         - Word Length = 8 Bits 
  51.         - One Stop Bit 
  52.         - No parity 
  53.         - Hardware flow control disabled (RTS and CTS signals) 
  54.         - Receive and transmit enabled 
  55.   */  
  56.   USART_InitStructure.USART_BaudRate = 115200;  
  57.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;  
  58.   USART_InitStructure.USART_StopBits = USART_StopBits_1;  
  59.   USART_InitStructure.USART_Parity = USART_Parity_No;  
  60.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
  61.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  
  62.    
  63.   /* USART configuration */  
  64.   USART_Init(USART1, &USART_InitStructure);  
  65.    
  66.   /* Enable USART */  
  67.   USART_Cmd(USART1, ENABLE);  
  68. }  
  69.    
  70. //  
  71.    
  72. int main(void)  
  73. {  
  74.   RCC_Configuration();  
  75.     
  76.   GPIO_Configuration();  
  77.     
  78.   USART1_Configuration();  
  79.     
  80.   while(1)  
  81.   {  
  82.     while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // Wait for Empty  
  83.     
  84.     USART_SendData(USART1, 0x49); // Send 'I'  
  85.   }  
  86.     
  87.   while(1); // Don't want to exit  
  88. }  
  89.    
  90. //  
  91.    
  92. #ifdef  USE_FULL_ASSERT  
  93.    
  94.   * @brief  Reports the name of the source file and the source line number 
  95.   *         where the assert_param error has occurred. 
  96.   * @param  file: pointer to the source file name 
  97.   * @param  line: assert_param error line source number 
  98.   * @retval None 
  99.   */  
  100. void assert_failed(uint8_t* file, uint32_t line)  
  101. {  
  102.   /* User can add his own implementation to report the file name and line number, 
  103.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */  
  104.    
  105.   /* Infinite loop */  
  106.   while (1)  
  107.   {  
  108.   }  
  109. }  
  110. #endif  

 接下来是使用中断的方法,使用USART3,管脚pd8,pd9,来源: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代码  Stm32使用Usart代码例子轮询、中断、DMA
  1. // STM32 USART IRQ TX/RX Loop (USART3 Tx PD.8, Rx PD.9) STM32F4 Discovery - sourcer32@gmail.com  
  2.    
  3. #include "stm32f4_discovery.h"  
  4.    
  5. volatile char StringLoop[] = "The quick brown fox jumps over the lazy dog\r\n";  
  6.    
  7. //  
  8.    
  9. void RCC_Configuration(void)  
  10. {  
  11.   /* --------------------------- System Clocks Configuration -----------------*/  
  12.   /* USART3 clock enable */  
  13.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);  
  14.    
  15.   /* GPIOD clock enable */  
  16.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);  
  17. }  
  18.    
  19. //  
  20.    
  21. void GPIO_Configuration(void)  
  22. {  
  23.   GPIO_InitTypeDef GPIO_InitStructure;  
  24.    
  25.   /*-------------------------- GPIO Configuration ----------------------------*/  
  26.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;  
  27.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  
  28.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  
  29.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  
  30.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  31.   GPIO_Init(GPIOD, &GPIO_InitStructure);  
  32.    
  33.   /* Connect USART pins to AF */  
  34.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART3);  
  35.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_USART3);  
  36. }  
  37.    
  38. //  
  39.    
  40. void USART3_Configuration(void)  
  41. {  
  42.     USART_InitTypeDef USART_InitStructure;  
  43.    
  44.   /* USARTx configuration ------------------------------------------------------*/  
  45.   /* USARTx configured as follow: 
  46.         - BaudRate = 9600 baud 
  47.         - Word Length = 8 Bits 
  48.         - One Stop Bit 
  49.         - No parity 
  50.         - Hardware flow control disabled (RTS and CTS signals) 
  51.         - Receive and transmit enabled 
  52.   */  
  53.   USART_InitStructure.USART_BaudRate = 9600;  
  54.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;  
  55.   USART_InitStructure.USART_StopBits = USART_StopBits_1;  
  56.   USART_InitStructure.USART_Parity = USART_Parity_No;  
  57.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
  58.    
  59.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  
  60.    
  61.   USART_Init(USART3, &USART_InitStructure);  
  62.    
  63.   USART_Cmd(USART3, ENABLE);  
  64.   
  65.  USART_ITConfig(USART3, USART_IT_TXE, ENABLE);  
  66.   
  67.  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);  
  68. }  
  69.    
  70. //  
  71.    
  72. void NVIC_Configuration(void)  
  73. {  
  74.   NVIC_InitTypeDef NVIC_InitStructure;  
  75.    
  76.   /* Configure the NVIC Preemption Priority Bits */  
  77.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  
  78.    
  79.   /* Enable the USART3 Interrupt */  
  80.   NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;  
  81.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
  82.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
  83.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
  84.   NVIC_Init(&NVIC_InitStructure);  
  85. }  
  86.    
  87. //  
  88.    
  89. void USART3_IRQHandler(void)  
  90. {  
  91.   static int tx_index = 0;  
  92.   static int rx_index = 0;  
  93.    
  94.   if (USART_GetITStatus(USART3, USART_IT_TXE) != RESET) // Transmit the string in a loop  
  95.   {  
  96.     USART_SendData(USART3, StringLoop[tx_index++]);  
  97.    
  98.     if (tx_index >= (sizeof(StringLoop) - 1))  
  99.       tx_index = 0;  
  100.   }  
  101.    
  102.   if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) // Received characters modify string  
  103.   {  
  104.     StringLoop[rx_index++] = USART_ReceiveData(USART3);  
  105.    
  106.     if (rx_index >= (sizeof(StringLoop) - 1))  
  107.       rx_index = 0;  
  108.   }  
  109. }  
  110.    
  111. //  
  112.    
  113. int main(void)  
  114. {  
  115.     RCC_Configuration();  
  116.    
  117.     GPIO_Configuration();  
  118.    
  119.     NVIC_Configuration();  
  120.    
  121.   USART3_Configuration();  
  122.    
  123.   while(1); // Don't want to exit  
  124. }  
  125.    
  126. //  

 最后,是使用DMA的方法,使用usart5,管脚:pc12,pd2,来源: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代码  Stm32使用Usart代码例子轮询、中断、DMA
  1. // STM32 UART5 DMA TX (Tx PC.12, Rx PD.2) STM32F4 Discovery - sourcer32@gmail.com  
  2.    
  3. #include "stm32f4_discovery.h"  
  4.    
  5. //  
  6.    
  7. void RCC_Configuration(void)  
  8. {  
  9.   /* --------------------------- System Clocks Configuration -----------------*/  
  10.   /* UART5 clock enable */  
  11.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);  
  12.    
  13.   /* GPIOC and GPIOD clock enable */  
  14.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD, ENABLE);  
  15.    
  16.   /* DMA1 clock enable */  
  17.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);  
  18. }  
  19.    
  20. //  
  21.    
  22. void GPIO_Configuration(void)  
  23. {  
  24.   GPIO_InitTypeDef GPIO_InitStructure;  
  25.    
  26.   /*-------------------------- GPIO Configuration ----------------------------*/  
  27.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // PC.12 UART5_TX, potential clash SDIN CS43L22  
  28.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  
  29.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  
  30.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  
  31.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  32.   GPIO_Init(GPIOC, &GPIO_InitStructure);  
  33.    
  34.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; // PD.2 UART5_RX  
  35.   GPIO_Init(GPIOD, &GPIO_InitStructure);  
  36.    
  37.   /* Connect USART pins to AF */  
  38.   GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_UART5);  
  39.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_UART5);  
  40. }  
  41.    
  42. //  
  43.    
  44. void UART5_Configuration(void)  
  45. {  
  46.     USART_InitTypeDef USART_InitStructure;  
  47.    
  48.   /* USARTx configuration ------------------------------------------------------*/  
  49.   /* USARTx configured as follow: 
  50.         - BaudRate = 115200 baud 
  51.         - Word Length = 8 Bits 
  52.         - One Stop Bit 
  53.         - No parity 
  54.         - Hardware flow control disabled (RTS and CTS signals) 
  55.         - Receive and transmit enabled 
  56.   */  
  57.   USART_InitStructure.USART_BaudRate = 115200;  
  58.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;  
  59.   USART_InitStructure.USART_StopBits = USART_StopBits_1;  
  60.   USART_InitStructure.USART_Parity = USART_Parity_No;  
  61.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
  62.    
  63.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  
  64.    
  65.   USART_Init(UART5, &USART_InitStructure);  
  66.    
  67.   USART_Cmd(UART5, ENABLE);  
  68. }  
  69.    
  70. //  
  71.    
  72. char Buffer[] = "The quick brown fox jumps over the lazy dog\r\n";  
  73.    
  74. void DMA_Configuration(void)  
  75. {  
  76.   DMA_InitTypeDef  DMA_InitStructure;  
  77.    
  78.   DMA_DeInit(DMA1_Stream7);  
  79.    
  80.   DMA_InitStructure.DMA_Channel = DMA_Channel_4;  
  81.   DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; // Transmit  
  82.   DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)Buffer;  
  83.   DMA_InitStructure.DMA_BufferSize = (uint16_t)sizeof(Buffer) - 1;  
  84.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART5->DR;  
  85.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  
  86.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  
  87.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  
  88.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;  
  89.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  
  90.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;  
  91.   DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;  
  92.   DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;  
  93.   DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;  
  94.   DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;  
  95.    
  96.   DMA_Init(DMA1_Stream7, &DMA_InitStructure);  
  97.    
  98.   /* Enable the USART Tx DMA request */  
  99.   USART_DMACmd(UART5, USART_DMAReq_Tx, ENABLE);  
  100.    
  101.   /* Enable DMA Stream Transfer Complete interrupt */  
  102.   DMA_ITConfig(DMA1_Stream7, DMA_IT_TC, ENABLE);  
  103.    
  104.   /* Enable the DMA RX Stream */  
  105.   DMA_Cmd(DMA1_Stream7, ENABLE);  
  106. }  
  107.    
  108. //  
  109.    
  110. void DMA1_Stream7_IRQHandler(void)  
  111. {  
  112.   /* Test on DMA Stream Transfer Complete interrupt */  
  113.   if (DMA_GetITStatus(DMA1_Stream7, DMA_IT_TCIF7))  
  114.   {  
  115.     /* Clear DMA Stream Transfer Complete interrupt pending bit */  
  116.     DMA_ClearITPendingBit(DMA1_Stream7, DMA_IT_TCIF7);  
  117.   }  
  118. }  
  119.    
  120. //  
  121.    
  122. void NVIC_Configuration(void)  
  123. {  
  124.   NVIC_InitTypeDef NVIC_InitStructure;  
  125.    
  126.   /* Configure the Priority Group to 2 bits */  
  127.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
  128.    
  129.   /* Enable the UART5 RX DMA Interrupt */  
  130.   NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream7_IRQn;  
  131.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
  132.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
  133.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
  134.   NVIC_Init(&NVIC_InitStructure);  
  135. }  
  136.    
  137. //  
  138.    
  139. int main(void)  
  140. {  
  141.     RCC_Configuration();  
  142.    
  143.   NVIC_Configuration();  
  144.    
  145.     GPIO_Configuration();  
  146.    
  147.   UART5_Configuration();  
  148.    
  149.   DMA_Configuration();  
  150.    
  151.   while(1); // Don't want to exit  
  152. }  
  153.    
  154. //  
  155.    
  156. #ifdef  USE_FULL_ASSERT  
  157.    
  158.   * @brief  Reports the name of the source file and the source line number 
  159.   *   where the assert_param error has occurred. 
  160.   * @param  file: pointer to the source file name 
  161.   * @param  line: assert_param error line source number 
  162.   * @retval None 
  163.   */  
  164. void assert_failed(uint8_t* file, uint32_t line)  
  165. {  
  166.   /* User can add his own implementation to report the file name and line number, 
  167.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */  
  168.    
  169.   /* Infinite loop */  
  170.   while (1)  
  171.   {  
  172.   }  
  173. }  
  174. #endif  
  175.   * @} 
  176.   */  
  177.    
  178. //  

关键字:Stm32  Usart  轮询  中断  DMA 引用地址:Stm32使用Usart代码例子轮询、中断、DMA

上一篇:STM32 关于USART接收中断的BUG和注意事项
下一篇:STM32中USART的使用方法

推荐阅读最新更新时间:2024-03-16 14:57

STM32 SPI配置
用stm32的库进行深入 SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 四根线 MISO 主设备数据输入,从设备数据输出。 MOSI 主设备数据输出,从设备数据输入。 SCLK时钟信号,由主设备产生。 CS从设备片选信号,由主设备控制。 外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节 时钟极性CPOL对传输协议没有重大的影响,代表串行同步时钟的空闲状态下的电平。 时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串
[单片机]
<font color='red'>STM32</font> SPI配置
单片机编程技巧-时钟中断
功能强大的时钟中断   在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断协助主程序完成定时、延时等操作。   下面以6MHz时钟的AT89C51系统为例,说明时钟中断的应用。   定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的
[工业控制]
适用于STM32 MCU的NanoEdge人工智能软件
Cartesiam已针对STM32微控制器开发板推出优化的NanoEdge人工智能软件。 据Cartesiam称,NanoEdge AI Studio专为没有机器学习相关资源的公司而设计。 “在许多改进中,它直接通过STM32串行USB端口和Cartesiam的自动数据符合性和质量验证工具的增强版,将实时数据记录到NanoEdge AI Studio中。” ST的Nucleo-F401RE和Nucleo-L432KC开发板现已完全支持。 该软件套件可在Windows 10或Ubuntu上运行,用户能够生成并验证嵌入式系统的机器学习库。 用户可以选择上述开发板之一并下载自定义的NanoEdge AI库,可以构建可在板
[单片机]
STM32 USB设计原理
首先,我们来看看 usb 的工作过程。 当 usb 设备接入到主机时,主机开始枚举 usb 设备,并向 usb 设备发出指令要求获取 usb 设备的相关描述信息,其中包括设备描述( device descriptor )、配置描述( configuration descriptor )、接口描述( interface descriptor )、端点描述( endpoint descriptor )等。这些信息是通过端点 0 ( endpoint 0 )传送到主机的。获取各种描述信息后,操作系统会为其配置相应的资源。这样主机就可以与设备之间进行通信了。 usb 通讯有四种通讯方式控制( control )、中断( inter
[单片机]
stm32 AD参考电压
最近在进行原理图设计的时候遇到了一个问题,就是STM32的100管脚一下芯片没有Vref的问题。64Pin及以下封装的芯片电源管脚有:VDD - 单片机3.3V 电源正,VSS - 单片机3.3V 电源负,VDDA - 单片机A/D 转换器电源正,VSSA - 单片机A/D 转换器电源负。 插一句:由于STM32F103系列单片机的内部高速RC 振荡器(HSI)由VDDA、VSSA 供电,故即使不使用单片机自带的A/D 转换器,也必须保证VDDA、VSSA 的供电,否则STM32F103单片机不能正常启动。 言归正传 在小于等于64Pin的芯片中,在芯片的内部Vref+是和VDDA连接在一起的,也就是说ADC的是以VDDA为
[单片机]
51单片机边沿触发中断响应时刻的测量
MCS51单片机系列属于8位单片机,它是Intel公司继MCS48系列的成功设计之后,于1980年推出的产品。由于MCS51系列具有很强的片内功能和指令系统,因而使单片机的应用发生了一个飞跃,这个系列的产品也很快成为世界上第二代的标准控制器。51系列单片机有5个中断源,其中有2个是外部输入中断源INT0和INT1。可由中断控制寄存器TCON的IT1(TCON.2)和IT0(TCON.1)分别控制外部输入中断1和中断0的中断触发方式。若为0,则外部输入中断控制为电平触发方式;若为1,则控制为边沿触发方式。这里是下降沿触发中断。 1 问题的引出 几乎国内所有的单片机资料对单片机边沿触发中断的响应时刻方面的定义都是不明确的或者是错误
[单片机]
S3C2440的中断的那些事儿(一) 汇编的讲解
1. ARM的中断模式有7种: 1. 用户模式: 用于平时的程序运行 2. 快速中断模式: 用于高速数据传输或者通道处理, 此模式的优先级最高 最容易被触发 32个中断只能有一个快速中断触发 3. 中断模式:用于普通的中断模式 4. 管理模式:操作系统使用的保护模式 5. 数据访问终止模式: 当数据或指令与读取终止时候进入此模式 6. 系统模式: 运行具有特权的操作系统任务
[单片机]
S3C2440的<font color='red'>中断</font>的那些事儿(一) 汇编的讲解
按键开关机电路图 按键开关机电路设计方案
最近做个基于STM32脑波检测的项目,甲方爸爸要求使用按键进行开关机。在网上查了一些资料,找到了很多案例分享,在此进行总结。 主要分为以下两部分: 单片机控制按键开关机电路 独立按键开关机电路 1、单片机控制按键开关机电路 1.1、简约版 图中Ctr和Key接单片机管脚,作用如下: Ctr作为开关控制用 Key作为按键检测用 操作流程: 开机:按下按键,Q1导通,单片机上电,控制Ctr为低电平,保持Q1导通。 关机:再按下按键,单片机控制Ctr为高电平,此时松开按键Q1截至,单片机停电。 如图: 简约版 优缺点分析: 优点:电路简单,元器件比较少。 缺点:在停机状态下单片机的IO口依旧带电,正常使用没问
[单片机]
按键开关机电路图 按键开关机电路设计方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved