diff --git a/src/serial.rs b/src/serial.rs
index 6b7d7c7b7ce6674be1c1626d2ac21f38d4dc6b29..1e5842a918f13ec9a3e1479e54e992454617c915 100644
--- a/src/serial.rs
+++ b/src/serial.rs
@@ -21,6 +21,7 @@
 //! - Interrupt = USART3
 
 use core::any::{Any, TypeId};
+use core::marker::Unsize;
 use core::ops::Deref;
 use core::ptr;
 
@@ -394,7 +395,7 @@ impl<'a> Serial<'a, USART1> {
         buffer: Ref<Buffer<B, Dma1Channel5>>,
     ) -> ::core::result::Result<(), dma::Error>
     where
-        B: AsMut<[u8]>,
+        B: Unsize<[u8]>,
     {
         let usart1 = self.0;
 
@@ -402,7 +403,7 @@ impl<'a> Serial<'a, USART1> {
             return Err(dma::Error::InUse);
         }
 
-        let buffer = buffer.lock_mut().as_mut();
+        let buffer: &mut [u8] = buffer.lock_mut();
 
         dma1.cndtr5.write(|w| unsafe {
             w.ndt().bits(u16(buffer.len()).unwrap())
@@ -428,7 +429,7 @@ impl<'a> Serial<'a, USART1> {
         buffer: Ref<Buffer<B, Dma1Channel4>>,
     ) -> ::core::result::Result<(), dma::Error>
     where
-        B: AsRef<[u8]>,
+        B: Unsize<[u8]>,
     {
         let usart1 = self.0;
 
@@ -436,7 +437,7 @@ impl<'a> Serial<'a, USART1> {
             return Err(dma::Error::InUse);
         }
 
-        let buffer = buffer.lock().as_ref();
+        let buffer: &[u8] = buffer.lock();
 
         dma1.cndtr4.write(|w| unsafe {
             w.ndt().bits(u16(buffer.len()).unwrap())